2013-08-28 77 views
0

爲什麼下面的代碼在C#中找不到任何東西,但在我在線測試時工作正常?正則表達式在行尾過濾掉空格

Match m = Regex.Match(@"abc 
cd", "^abc[ \t]*$", RegexOptions.Multiline); 

我使用這個在線正則表達式測試儀:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

我希望得到「ABC」

+0

不同風味的正則表達式。你在哪裏在線測試它? –

+0

這只是一個例子。我想在沒有空間的情況下獲得「abc」,假設我將組添加到了我的正則表達式中。 – leon

+1

你需要一個'@'模式嗎? – I4V

回答

0

我想我知道這裏發生了什麼。在我的文本文件中,EOL是CRLF。但C#正則表達式把LF當作EOL(這是'$')。所以在我的情況下,正則表達式找不到CR並聲稱失敗。和@「^ abc [\ t \ r] * $」起作用。

1

對於多行字符串,可以去掉末尾的空間,而無需使用正則表達式。

string trimEnd = string.Join("\n", yourString.Split('\n').Select(x => x.TrimEnd())); 
+0

感謝您的回答。我只是想弄清楚正則表達式有什麼問題。 – leon

+0

C#framework 4.0 – leon

1

如果你想獲得abc 可以使用:^abc.*$代替。

如果你想得到所有, 你可以使用:(?s)^abc.*$來代替。

我覺得你的問題是:[\ t]無法比擬的換行符,所以你也可以改變你的代碼以匹配這樣的新行:

Match m = Regex.Match(@"abc 
     cd", @"^abc[ \t\r]*$", RegexOptions.Multiline); 
+0

我的原始表達式看起來像這樣@「^ [\ t] * \ [[[Language =(?'abbr'。+)\ [(?'name'。+)\] \] \] [ \ t] * $」。我確實想確保除了我想要的東西外剩下的就是空間。 – leon

+0

[\ t]後面有'*',所以如果沒有空格,應該沒問題。我不想匹配換行符。 – leon

+0

@leon,但在你的C#代碼中,字符串:@「abc cd」確實有換行符,所以你的正則表達式不起作用。 –

0

我瞭解你沒有捕獲的任何組所以你沒有得到任何結果。

第一次嘗試這樣的:

Debug.Print(Regex.IsMatch(@"abc 
cd", "^abc[ \t]*$", RegexOptions.Multiline).ToString()); 

你應該得到true,因爲有一個匹配。

那就試試這個:(注意括號 '()' 後, '^' 和前 '$')

Debug.Print(Regex.Match(@"abc 
cd", "^(abc[ \t]*)$", RegexOptions.Multiline).ToString()); 

你應該Output Window得到一個結果。

希望它有幫助!

+0

我試過了。結果是「」; – leon