2010-03-04 29 views
2

有人可以向我解釋這一點。 我用perl正則表達式很不錯,但很明顯,我爲什麼這樣做不起作用而處於虧損狀態。.net正則表達式匹配用逗號分隔的兩個單詞不起作用

下面的代碼在輸出變量中存儲「Person Test」。

im output As String 
Dim userName As String = "Test, Person" 
Dim re As New Regex("(\w+),\s(\w+)", RegexOptions.Singleline) 
output = re.Replace(userName, "$2 $1") 

那麼,爲什麼下面的代碼不會在輸出變量中存儲「#TEST ## Person#」。

Dim output As String 
Dim userName As String = "Test, Person" 
Dim re As New Regex("(\w+),\s(\w+)") 
For Each Match As Match In re.Matches(userName) 
    output &= "#" & Match.ToString & "#" 
Next 

感謝您的幫助。

回答

2

你是混亂的比賽和團體。一場比賽是整場比賽,包括所有人羣中的人物,而不是團體。一組只是括號內匹配的部分。在.NET中,組0是完全匹配的,其餘組1,2,...等類似於$ 1,$ 2等......在Perl中工作。如果您嘗試運行此操作,您可能會更好地理解它:

For Each Group As Group In re.Match(userName).Groups 
     output &= "#" & Group.ToString & "#" 
    Next 
+0

謝謝。我知道我錯過了一些簡單的東西。 – Threekill 2010-03-04 22:56:45

0

我認爲這會工作

output = re.Replace(userName, "\2 \1") 

對於第二:

For Each Match As Match In re.Matches(userName) 
    output &= "#" & Match.Groups(1) & "#" & "#" & Match.Groups(2) & "#" 
Next 
相關問題