我有这个测试数据:
我有这个正则表达式
^.*#(?<legacyId>\d*).*$
此处的捕获组始终捕获#\ d *的最后一次出现 因此,使用当前正则表达式捕获的组的当前结果集是
我想修改正则表达式,以便结果集变为:
规则不应只是捕获第一个匹配而不是最后一个匹配 我想要的是捕获不之前的“
”的群组我怀疑我必须使用正面和负面前瞻的组合?
答案 0 :(得分:0)
您尚未指定正在使用的编程语言或正则表达式库。这是至关重要的信息。没有它,我只能猜测你可以使用哪些功能。
您提供的唯一重要线索是使用命名捕获。由于您使用的是(?<name>)
语法而不是(?P<name>)
,因此可以将您的正则表达式缩小到以下其中一种:
好的,所以即使这个线索也没有缩小范围。使你的正则表达式支持你的新规则的相关功能可能是负面的看法,但并非所有上述支持看起来都是背后的,并且几乎所有这些都支持在看后面的不同子功能。
这是一个使用固定长度负面观察的解决方案,试图以一种简单的方式支持上述各种口味:
^.*#(?<!estate of #)(?<legacyId>\d+)
使用此功能,您需要启用使换行符^
和$
匹配的标记。您不能启用允许点匹配换行符的标志,也不能启用自由间距和行注释的标志。 (这些标志在不同的地方使用不同的名称和字母。)由于效率较低的原因,我在#
符号后面放置了负面的背后隐藏。
请不要让人们猜测您正在使用的编程语言和正则表达式。