【发布时间】:2016-07-21 19:53:02
【问题描述】:
我想匹配字符串 “一 234 二 449 三 775 f4our”中的 “775”(表示最后 3 位数字,总出现次数未知) ,其中 "f4our" 表示未知数量的字符(字母、数字、空格,但不是连续 3 个或更多数字)。
我想出了正则表达式 "(\d{3}).*?$" 认为 "?" 就足以得到 775 而不是 234,但这似乎不起作用。
有没有什么方法可以使用 VBA 正则表达式来实现这一点?
【问题讨论】:
我想匹配字符串 “一 234 二 449 三 775 f4our”中的 “775”(表示最后 3 位数字,总出现次数未知) ,其中 "f4our" 表示未知数量的字符(字母、数字、空格,但不是连续 3 个或更多数字)。
我想出了正则表达式 "(\d{3}).*?$" 认为 "?" 就足以得到 775 而不是 234,但这似乎不起作用。
有没有什么方法可以使用 VBA 正则表达式来实现这一点?
【问题讨论】:
请注意,(\d{3}).*?$ 仅匹配并捕获前 3 个连续数字并将其捕获到组 1 中,然后匹配除换行符之外的任何 0+ 字符,直到字符串末尾。
您需要获取字符串末尾的 3 位数块,后面的任何地方都没有 3 位数块。
您可以使用否定前瞻(?!.*\d{3}) 对匹配施加限制:
\d{3}(?!.*\d{3})
请参阅regex demo。或者 - 如果将 3 位数字作为整个单词匹配:
\b\d{3}\b(?!.*\b\d{3}\b)
【讨论】: