正则表达式:匹配所有内容,但不匹配特定字符串,包括空格(正则表达式,尽管如此,VBA visual basic)

regex: match everything, but not a certain string including white sapce (regular expression, inspite of, anything but, VBA visual basic)

伙计们,关于“正则表达式:匹配所有内容,但不...”已经有数十亿个问题,但似乎不适合我的简单问题。

一个简单的字符串:“1 Rome, 2 London, 3 Wembley Stadium”,我只想匹配“1 Rome, 2 London, 3 Wembley Stadium”,以便仅提取名称但不是行列 ("Rome, London, Wembley Stadium").

使用正则表达式测试器 (https://extendsclass.com/regex-tester.html),我可以通过以下方式简单地匹配相反的内容:

([0-9]+\s*) 它给了我:

"1 罗马,2 伦敦,3 温布利大球场"。

但是如何反转呢?我试过类似的东西:

[^0-9 |;]+[^0-9 |;],但它也排除了我想要保留的空格(例如,在逗号之后和温布利球场和体育场之间,“1 Rome, 2 London, 3 Wembley Stadium").我想“0-9 ”需要以某种方式确定为一个连续的字符串。我尝试了各种括号、引号、\s*,但没有任何效果。

注意:我在 visual basic 环境中工作,不允许后视!

您可以使用

\d+\s*(.*?)(?=,\s*\d+\s|$)

查看 regex demo,从 match.Submatches(0) 获取值。 详情:

  • \d+ - 一位或多位数字
  • \s* - 零个或多个空格
  • (.*?) - 第 1 组:除换行字符外的零个或多个字符尽可能少
  • (?=,\s*\d+\s|$) - 正向前瞻,需要 ,、零个或多个空格、一个或多个数字,然后是紧靠当前位置右侧的空格或字符串结尾。

这里有一个如何获取所有匹配项的演示:

Sub TestRegEx()
    Dim matches As Object, match As Object
    Dim str As String

    str = "1 Rome, 2 London, 3 Wembley Stadium"
    
    Set regex = New regExp
    regex.Pattern = "\d+\s*(.*?)(?=,\s*\d+\s|$)"
    regex.Global = True

    Set matches = regex.Execute(str)
    
    For Each match In matches
        Debug.Print match.subMatches(0)
    Next
End Sub

输出: