正则表达式:匹配所有内容,但不匹配特定字符串,包括空格(正则表达式,尽管如此,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
输出:
伙计们,关于“正则表达式:匹配所有内容,但不...”已经有数十亿个问题,但似乎不适合我的简单问题。
一个简单的字符串:“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
输出: