[英]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.