【发布时间】:2009-01-03 02:13:26
【问题描述】:
我遇到了一个看似非常简单的 RegEx 问题,但我无法让它工作。
假设我有这样的输入:
Some text %interestingbit% lots of random text lots and lots more %anotherinterestingbit%
Some text %interestingbit% lots of random text OPTIONAL_THING lots and lots more %anotherinterestingbit%
Some text %interestingbit% lots of random text lots and lots more %anotherinterestingbit%
输入中有很多重复的块,在每个块中我想捕捉一些始终存在的东西(%interestingbit% 和 %anotherinterestingbit%),但也有一些文本可能会或可能不会出现在-在它们之间(OPTIONAL_THING),如果它在那里,我想捕捉它。
像这样的 RegEx 只匹配其中包含 OPTIONAL_THING 的块(并且命名的捕获有效):
%interestingbit%.+?((?<OptionalCapture>OPTIONAL_THING)).+?%anotherinterestingbit%
所以看起来这只是让整个组可选的问题,对吧?这就是我尝试过的:
%interestingbit%.+?((?<OptionalCapture>OPTIONAL_THING))?.+?%anotherinterestingbit%
但我发现虽然这匹配所有 3 个块,但命名捕获(OptionalCapture)在所有块中都是空的!我如何让它发挥作用?
请注意,每个块中可以有很多文本,包括换行符,这就是我输入“.+?”的原因。而不是更具体的东西。我正在使用 .NET 正则表达式,使用 The Regulator 进行测试。
【问题讨论】: