簡體   English   中英

正則表達式,C#

[英]Regular Expressions, C#

我有一個大型X12 EDI文件,其中包含許多描述字符串(1000s)。 這些描述字符串可以在帶有相同分隔符*的其他字符串之前,之后和之間找到。

所有描述字符串均以標簽REF * TC **開頭,並以字符〜結尾。

我需要查找並替換出現在這兩個標記之間的所有*,而不必觸摸其他字符串,在本例中為DTM字符串。

我將提供兩個描述字符串的示例,因為它們會在文件中找到。 如您所見,第一個描述字符串包含我需要替換的*,第二個描述字符串不包含任何需要替換的*。

~REF*TC**BLAH*BLAH*~REF*TC**BLAHBLAH~REF*TC***BLAH~DTM*010*20110329~

所需的輸出:

~REF*TC**BLAHBLAH~REF*TC**BLAHBLAH~REF*TC**BLAH~DTM*010*20110329~

我正在使用C#

到目前為止,這就是我所擁有的。

查找表達式:REF * TC **(。{0,}?)(* +)(。{0,}?)(**)(。{0,}?)(**)〜

這是我想出的:

var str = "~REF*TC**BLAH*BLAH*~REF*TC**BLAHBLAH~REF*TC***BLAH~DTM*010*20110329~";
var result = (new Regex(@"(?<pre>REF\*TC\*\*)(?<text>.*?)(?<post>~)")).Replace(str,(m) =>
{
    return String.Join(String.Empty,new String[]{
        m.Groups["pre"].Value,
        m.Groups["text"].Value.Replace("*",String.Empty),
        m.Groups["post"].Value
    });
});

演示

坦白說,這只是基於您提供的內容,而不是100%確定您要做什么。

正則表達式很棒,但正如名言所說, Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. 跳過正則表達式,僅在其上使用字符串方法即可。 您可以像在REF*TC**起始標簽上將其分割然后替換所有*字符一樣簡單,或者可以嘗試更復雜的東西。 當簡單的字符串方法可以使用正則表達式時,請不要一路走。

編輯:

這是一個簡單的例子:

string[] lines = file.Split("REF*TC**");
for(int i=0;i<lines.Length;i++)
{
    lines[i] = lines[i].Replace("*", "");
}
string output = string.Join("REF*TC**", lines);

您可能必須在末尾清理額外的“ REF * TC **”,我不記得確切地Join()如何處理它。 無論如何,應該這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM