【发布时间】:2021-09-28 22:54:40
【问题描述】:
伙计们,关于“regex: match all, but not ...”已经有数十亿个问题,但似乎不适合我的简单问题。
一个简单的字符串:“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 Rome, 2 London, 3 Wembley Stadium”。
但是如何扭转呢?我试过类似的东西:
[^0-9 |;]+[^0-9 |;],但它也排除了我想要保留的空格(例如,在逗号之后以及在温布利和体育场之间,“1 Rome, 2 London, 3 Wembley Stadium”)。我想“0-9 ”需要以某种方式确定为一个连续的字符串。我尝试了各种括号,引号,\s*,但没有任何东西。
注意:我在 Visual Basic 环境中工作,不允许后视!
【问题讨论】:
-
尝试
\d+\s*(.*?)(?:,|$)并从match.Submatches(0)获取值。见the regex demo。 -
如果你的字符串真的那么简单,你也可以使用
Split函数来获取像Split(simpleStr,",")这样的数组,然后使用Right和Instr 来检查每个项目中的第一个空格。 -
或者,
\d+\s*(.*?)(?=,\s*\d+\s|$),参见this regex demo。 -
\d+\s*(.*?)(?=,\s*\d+\s|$)匹配除“,”之外的所有内容,但我需要匹配所有内容,但“1”、“2”、...(注意空格数字后面) -
不,
\d+\s*(.*?)(?=,\s*\d+\s|$)捕获您在第 1 组中需要的东西。它匹配什么并不重要。
标签: vba regex-lookarounds regex-negation lookbehind