我希望有人可以帮我解决我认为的正则表达式问题。
我有一个程序,它接受一段HTML代码并从中提取电话号码并用半冒号分隔它们。我想要做的是更改它,以便它在两个特定的文本字符串之间提取任何内容,其间有反斜杠。例如
stringone/******/stringtwo
stringone/876876876876876/stringtwo
stringone/abcdefghijklmnopqrstuvwxyz/stringtwo
在总字符串之前和之后,可能有也可能没有空格,字母,数字或特殊字符。
我真的尝试过正则表达式,但我无法理解这一点。我假设(并且只是本能地)需要改变的行是这一行:
.Pattern = "(\+([\d \(\)-]+){10,15})|((\d( |-))?\(?\d{2,4}\)?( |-)\d{3,4}( |-)\d{3,4})|(\d{3,4}( |-)\d{7})"
但整个代码如下:
Function Main ( strText )
dim strResult
strResult = Extract_Phone_Numbers ( strText )
Main = strResult
End Function
' This function extracts phone numbers from a specific string using pattern matching (a regular expression).
Function Extract_Phone_Numbers ( strText )
dim strResult
Set RegularExpressionObject = New RegExp
With RegularExpressionObject
.Pattern = "(\+([\d \(\)-]+){10,15})|((\d( |-))?\(?\d{2,4}\)?( |-)\d{3,4}( |-)\d{3,4})|(\d{3,4}( |-)\d{7})"
.IgnoreCase = True
.Global = True
End With
Set objMatches = RegularExpressionObject.Execute( strText )
For Each objMatch in objMatches
If ( InStr ( strResult, objMatch.value ) = 0 ) Then
If ( Len ( strResult ) > 0 ) Then
strResult = strResult + "; "
End If
strResult = strResult + objMatch.value
End If
Next
Set RegularExpressionObject = nothing
strResult = Trim ( strResult )
Extract_Phone_Numbers = strResult
End Function
任何人都可以帮助我改变这种情况吗?
答案 0 :(得分:1)
stringone/[^/]*/stringtwo
,包括斜杠(?<=stringone/)[^/]*(?=/stringtwo)
stringone/([^/]*)/stringtwo
在the demo上,查看右侧窗格中的第1组捕获。请注意,在此正则表达式测试程序中,必须转义斜杠。
<强>解释强>
stringone/
匹配文字stringone/
,然后否定字符类[^/]
匹配一个不是/
的字符,*
量词重复该字符0次或更多次,然后我们匹配最后的/stringtwo
。