我需要在所有匹配项中循环说出以下字符串:
<a href='/Product/Show/{ProductRowID}'>{ProductName}</a>
我希望捕获包含它们的{}中的值,因此我想要{ProductRowID}和{ProductName}
到目前为止,这是我的代码:
Dim r As Regex = New Regex("{\w*}", RegexOptions.IgnoreCase)
Dim m As Match = r.Match("<a href='/Product/Show/{ProductRowID}'>{ProductName}</a>")
我的RegEx模式是否正确?如何循环匹配的值?我觉得这应该是非常容易的,但今天早上我被困在这上面了!
答案 0 :(得分:3)
你的模式缺少一个小细节:
\{\w*?\}
必须转义大括号,你想要非贪婪的明星,或者你的第一个(也是唯一的)匹配是:"{ProductRowID}'>{ProductName}"
。
Dim r As Regex = New Regex("\{\w*?\}")
Dim input As String = "<a href='/Product/Show/{ProductRowID}'>{ProductName}</a>"
Dim mc As MatchCollection = Regex.Matches(input, r)
For Each m As Match In mc
MsgBox.Show(m.ToString())
Next m
RegexOptions.IgnoreCase
不需要,因为这个特殊的正则表达式无论如何都不区分大小写。
答案 1 :(得分:2)
您可以使用以下正则表达式对匹配进行分组:
<a href='/Product/Show/(.+)'\>(.+)</a>
通过这种方式,您可以获得1美元和2美元的匹配值。
您还要提供您的匹配名称,以便它们不是匿名/位置导向检索:
<a href='/Product/Show/(?<rowid>.+)'\>(?<name>.+)</a>
答案 2 :(得分:1)
将您的RegEx模式更改为\{\w*\}
,然后它会按预期匹配。
您可以使用online .net RegEx tester进行测试。