2015-10-20 105 views
0

我想篩選正則表達式有... 正則表達式 ...正則表達式過濾正則表達式,額外附加的最終 r

我的目標是在一個文件,該文件的內容是

.. 。
信息1 ...
ENTITY1 =^\ | 1 [\ S \噸] + [\ S] + [\ S \噸] + $
信息2 ...
(*)。 ..

使用方法將文件傳輸到mystring ReadAllText(path);其中path是文本文件的路徑。

我使用的代碼

//Retrieve regex like ^\|1[\s\t]+[\S]+[\s\t]+(.*)$ in Entity1=^\|1[\s\t]+[\S]+[\s\t]+(.*)$ 
//\d for any digit followed by = 
// . for any character found 1 or + times, ended with space character 
m = Regex.Match(mystring, @"Entity\d=(.+)\s"); 
string regex = m.Groups[1].Value; 

其作品幾乎細

我得到的是(從degugger裏看到的)

^\ | 1 \ S \ T] + [\ s \ t] +(。*)$ \ r

還有一個\ r在結果的末尾。它會在代碼的其他部分導致不需要的額外換行。

Trying @「Entity \ d =(。+)」(即移除最後的\ s)沒有幫助。

如何避免其它附加\ r優雅的任何想法(我不想,如果可能的話,跟蹤壓軸\ r和刪除)

在線正則表達式測試儀像regex101不允許預見到這個問題臨睡前C#代碼

回答

4

使用否定的字符類,以確保\r不匹配:

m = Regex.Match(mystring, @"Entity\d=([^\r\n]+)"); 

[^\r\n]類指匹配任何CHARACT呃除了回車和換行

確實regex101不保留回車。您可以在regexhero.net看到\r匹配:

enter image description here

enter image description here

1

檢查,如果這個工程:

@"Entity\d=(.+)(?=(\r|\n))"; 

(?=(\r|\n))positive lookahead並且意味着\r\n不會包括在結果中。

編輯:

@"Entity\d=(.+?)(?=\r|\n)"; 
+0

這當然是一種選擇,但它的成本一定的性能點與含有交替(=多冗餘回溯)先行點貪婪匹配。 –

+0

我的評論更正:您的第一個建議@「Entity \ d =(。+)(?= \ r)」正在工作,但@「Entity \ d =(。+)(?=(\ r | \ n)) 「不工作,額外的\ r仍然存在。 – NGI