编辑正则表达式代码

时间:2014-06-26 08:07:04

标签: regex

我希望有人可以帮我解决我认为的正则表达式问题。

我有一个程序,它接受一段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

任何人都可以帮助我改变这种情况吗?

1 个答案:

答案 0 :(得分:1)

  1. 通常,匹配您的模式的模式是stringone/[^/]*/stringtwo,包括斜杠
  2. 要匹配内部,但不包括斜杠,有几种方法。如果你的味道支持外观,请使用:(?<=stringone/)[^/]*(?=/stringtwo)
  3. VBS不支持lookbehind,因此我们需要匹配整个字符串,将所需部分捕获到第1组:stringone/([^/]*)/stringtwo
  4. the demo上,查看右侧窗格中的第1组捕获。请注意,在此正则表达式测试程序中,必须转义斜杠。

    <强>解释

    stringone/匹配文字stringone/,然后否定字符类[^/]匹配一个不是/的字符,*量词重复该字符0次或更多次,然后我们匹配最后的/stringtwo