是否有可能不会被添加到最终组中的正向超前组?
我似乎无法在组中已经使用?:
的情况下使用?=
,但是我只想检查是否存在具有前瞻性的组,但最后不使用它。
因此,当我将一些文本传递给该正则表达式时,我想检查常规模式是否匹配(这就是为什么我使用正向超前查询),但是我只想提取数字。
以下是示例-https://regex101.com/r/Q7WIUo/2
->以上所有正确,我想在magicalword之前找到最后一个数字,但它必须在前面包含XXX或YYY或ZZZ。但是如您所见,我有3组匹配,而我只需要第二组-可以吗?
答案 0 :(得分:2)
您可以使用一个捕获组来捕获magical word
之前的最后一个数字,因此您可以省略前行中的捕获组和最后(\D*)
附近的捕获组:
^(?=.*\s(?:XXX|YYY|ZZZ)\s).*?(\d+(?:\.\d+)?)\D*\bmagicalword\b\D*$
您仍然可以使用(\d+(?:\.\d+)?)
而不是使用([0-9,.]+)
(您的示例数据仅包含由点分隔的十进制值),但这有点广泛,因为它也可以捕获{{1 }}
说明
...
字符串的开头^
正向前进,断言右边是
(?=.
匹配非捕获组中列出的选项之一*\s(?:XXX|YYY|ZZZ)\s
积极回望)
匹配除换行符非贪婪以外的所有字符.*?
匹配1个以上的数字和一个可选部分以匹配点和1个以上的数字(\d+(?:\.\d+)?)
匹配0次以上而不是数字\D*
在单词边界之间匹配神奇单词\bmagicalword\b
匹配0次以上而不是数字\D*
字符串结尾如果字符串也可以以XXX YYY或ZZZ开头,则可以更改单词边界中的第一个$
\s