2013-01-07 95 views
0

我有這樣一段代碼:C#正則表達式 w +與*似乎不正常工作

String source = "There will will be"; 
Regex r = new Regex(@"There \w+ be"); 
Console.WriteLine(r.Match(source).Value); 

我不能看到任何輸出,如果源會有,我可以看到輸出。任何人都可以向我解釋嗎?

並在一定程度上提出了一個問題。如何創建一個可以在1或2之間找到的正則表達式(這是一個示例,我正在編寫某種解析器,並需要創建自己的表達式)的單詞。我已經嘗試了幾種組合,但都失敗了。 我的一個嘗試的:

@"\w+\s{1,2}" 

我認爲這是錯誤becouse {1,2}告訴正則表達式重複空格1〜2次,而不是整個\ w + \ S。你知道如何解決它或以不同的方式做出來嗎?

回答

1

原因是這個代碼不匹配。 \w可以是任何字母數字字符和下劃線(因此基本上爲AZ09_)。然而,空間是他們自己的組(由\s表示)。

爲了解決這個問題,你可以通過創建一個組進行正則表達式匹配兩種情況的匹配算法可以選擇使用[]任何元素:我還添加了?,使這個

There [\w\s]+? be

注一個非貪婪的匹配,試圖匹配一個儘可能小的文本部分(否則你可以在匹配時跳過be)。


至於另外,只使用非匹配組(節省一些的處理時間和存儲器相比,匹配組):

(?:\w+\s){1,2}

+0

非常感謝,可否請您再幫我一次,延長一個問題的時間? –

+0

更新* 15chr * – Mario

0

\w任何字字符匹配(A- zA-Z0-9和下劃線)。 There will will be將要求\w+匹配will will\w無法匹配空格,因此正則表達式不匹配。

0

這是因爲在\w+內空間不匹配。嘗試使用以下之一:

@"There \w+ \w+ be" 

@"There [\w\s]+ be" 
0

\w匹配所有字母數字字符和下劃線。在你的例子中,它必須匹配will will,它包含一個空格,因此不匹配。然而,您的表情將與There will be匹配,只有一個will

0

\ w匹配單詞字符,所以兩個'將'字符串之間的空格阻止匹配。您可能想替換爲@"There \w+(?:\s+\w+)* be"