我真的希望可以在正则表达式中解决此问题,但我担心不会...。
我正在寻找一个正则表达式,它将仅返回另一个术语出现在同一字符串中的多个匹配项。用一个例子可以更好地解释这一点。考虑:
The numbers are 144, 424, and 345. Not 45.
Run Code Online (Sandbox Code Playgroud)
我只想匹配“ 144”,“ 424”和“ 345”。(任何3位数的数字)-但前提是他们之前仅使用“ 数字 ” 一词。所以下面的附加示例:
The numbers we are looking for: 234 & 992
Run Code Online (Sandbox Code Playgroud)
应该仅返回“ 234”和“ 992”。
以下句子不匹配任何内容:
Some examples: 234, 244 and 12
Run Code Online (Sandbox Code Playgroud)
我以为我使用了以下正则表达式:
(?<=numbers\b)(?:.|\n)*?\b(\d{3})\b
Run Code Online (Sandbox Code Playgroud)
但它只匹配第一个数字。我正在努力实现的目标是否可能?在此似乎无法进行先行或后退的方式。出于种种原因,我仅限于仅使用一个正则表达式表达式,并且在事发后我无法选择访问各个捕获组。因此,寻找纯正则表达式方法!
您可以将此正则表达式与以下内容一起使用\G:
(?:\bnumbers\b|(?!^)\G).*?\b(\d{3})\b
Run Code Online (Sandbox Code Playgroud)
\G在上一个匹配的末尾或第一个匹配的字符串的开头断言位置。(?!^)\G避免在行开头匹配