我想在字符串 "one 234 two 449 three 775 f4our" 中匹配 "775" (表示最后3位数字与未知的总出现次数), "f4our" 表示未知数量的字符(字母,数字,空格,但不包括3位或更多位数)行) .
我想出正则表达式 "(\d{3}).*?$" 认为 "?" 足以获得 775 而不是 234 ,但这似乎不起作用 .
有没有办法用 VBA regular expressions 完成这个?
请注意, (\d{3}).*?$ 只匹配并捕获前3个连续数字的第1组,然后匹配除换行符之外的任何0个字符,直到字符串的结尾 .
(\d{3}).*?$
您需要在字符串末尾获取3位数字块,该字符串后面的任何地方都没有跟随3位数字块 .
您可以使用否定前瞻 (?!.*\d{3}) 对匹配施加限制:
(?!.*\d{3})
\d{3}(?!.*\d{3})
见regex demo . 或者 - 如果3个数字要匹配为整个单词:
\b\d{3}\b(?!.*\b\d{3}\b)
见another demo
1 回答
请注意,
(\d{3}).*?$
只匹配并捕获前3个连续数字的第1组,然后匹配除换行符之外的任何0个字符,直到字符串的结尾 .您需要在字符串末尾获取3位数字块,该字符串后面的任何地方都没有跟随3位数字块 .
您可以使用否定前瞻
(?!.*\d{3})
对匹配施加限制:见regex demo . 或者 - 如果3个数字要匹配为整个单词:
见another demo