【发布时间】:2015-05-31 01:54:37
【问题描述】:
VBA 中的正则表达式。
我正在使用以下正则表达式来匹配 4 位组的第二次出现,或者如果只有一个组,则匹配第一组:
\b\d{4}\b(?!.+\b\d{4}\b)
现在我需要做相反的事情:我需要匹配所有内容,直到第二次出现 4 位数组,或者直到第一个组(如果只有一个)。如果没有 4 位组,则捕获整个字符串。
这就足够了。
但还有一个更可取的“奖励”路线:如果有一种方法可以匹配所有内容,直到一个 4 位组,然后可选地跟随一些随机文本,但前提是没有其他 4 位组跟随它。如果存在第二组 4 位数字,则捕获该组之前的所有内容(包括第一组和句点,但不包括逗号)。如果没有组,则捕获所有内容。如果该行以 4 位组开头,则不捕获任何内容。
我知道这也可以(应该?)通过前瞻来完成,但我没有运气弄清楚它们是如何为此目的工作的。
例子:
Input: String.String String 4444
Capture: String.String String 4444
Input: String4444 8888 String
Capture: String4444
Input: String String 444 . B, 8888
Capture: String String 444 . B
奖金案例:
Input: 8888 String
Capture:
【问题讨论】:
-
你能提供一个示例字符串和字符串中的预期匹配吗?见:How to create a Minimal, Complete, and Verifiable example
-
您使用的是什么正则表达式?
-
现在也提供了示例。