有人可以向我解释一下。 我对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
感谢您的帮助。
答案 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