我正在使用以下VB.net代码查找HTML中的电话号码并使其“可点击”:
Regex.Replace(pDisp.Document.Body.innerHTML, "([0-9+ ]{3,6}[\s]{1,1}[0123456789 \-/]{4,15})", "<a href=http://DIAL/$1>$1</a>")
如果数字包含空格,则会出现问题,例如:
089 12233 455
这将替换为:
<a href=http://DIAL/089 12233 455>089 12233 455</a>
有没有办法获得
<a href=http://DIAL/08912233455>089 12233 455</a>
代替?
非常感谢!
答案 0 :(得分:2)
使用:
而不是<a href=http://DIAL/$1>$1</a>
<a href=http://DIAL/$1>$0</a>
以便输出文本是整个捕获,其中包括原始格式。
答案 1 :(得分:1)
您可以使用Regex.Replace
overload that accepts a MatchEvaluator
找到解决方案。
示例:
Dim pattern = "([0-9+ ]{3,6}[\s]{1,1}[0123456789 \-/]{4,15})"
Dim inputs As String() = { "089 12233 455", "0711 123 00 376", "0711 5600920", "0711 62009211", "0711 620092 11", "+49 711 123 00 376", "0049 711 5600920" }
For Each input In inputs
Console.WriteLine(input)
Dim result = Regex.Replace(input, pattern,
Function(m) "<a href=http://DIAL/" & m.Value.Replace(" ", "") & ">" & m.Value & "</a>")
Console.WriteLine("Result: {0}", result)
Console.WriteLine()
Next
lambda使用Match
结果,我们在用空字符串替换空格时构建链接,并保持链接文本的原始值不变。如果连接看起来不可读,则可以使用String.Format
使其更具可读性。如果href
需要删除前导加号,则可以链接另一个String.Replace
或在[+ ]
上执行另一个正则表达式替换以删除空格和加号。
我还认为您可以将原始正则表达式缩短为"[0-9+ ]{3,6}\s[0-9 -]{4,15}"
。与原始模式相比,[\s]{1,1}
已缩短,[0123456789 \-/]
使用0-9范围,如前所述。只要将破折号放置在角色类的开头或结尾处,就不需要对其进行转义。最后,我删除了/
,因为我没有看到正斜杠的例子。
答案 2 :(得分:0)
你可以打破你的捕获组。然后,在替换中,执行以下操作:
"<a href=http://DIAL/$1$2$3>$1 $2 $3</a>"