.net正则表达式匹配用逗号分隔的两个单词不起作用

时间:2010-03-04 22:34:11

标签: regex vb.net

有人可以向我解释一下。 我对perl正则表达式非常好,但显然我不知道为什么这不起作用。

下面的代码在输出变量中存储“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 个答案:

答案 0 :(得分:2)

你混淆了比赛和小组。匹配是整个匹配,包括组中的所有字符,而不是组中的所有字符。一组只是括号中匹配的一部分。在.NET中,组0是整个匹配,其余组1,2,...等类似于$ 1,$ 2等...在Perl中工作。如果你尝试运行它,你可能会更好地理解它:

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

答案 1 :(得分:0)

我认为这会起作用

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

第二名:

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