Skip to main content
 首页 » 编程设计

c#之被正则表达式难住了(积极的前瞻问题)

2024年02月02日28soundcode

我被一个正则表达式问题难住了。我一直在将它们用于一个项目并且它们一直在完美地工作,但后来我遇到了一种情况,我认为可以通过积极的前瞻来解决,但我的尝试并没有像我预期的那样产生结果。

为了说明,我在下面画了一行。其中,我想返回两个匹配项,第一个包含“This”和“thisThing”,另一个包含“That”和“thatThing”,其中第一个值只能是“This”或“That” "并且第二个值可以是任何 (\w*) 模式。

adsf(49) asd k:38* K.This(jfkael dk&$% thisThing) and K.That($$$$ djaf aj_dfj^^ ^ thatThing); 

我认为这会是这样的:

K\.(This|That)  (????????????????)    (\w*)(?=\)) 

意思是,找出出现在“K”之后的“This”或“That”。然后得到“)”之前的第一个词。但是,我真的不明白如何指定(向前看直到找到“)”,然后回溯直到找到它背后的词。这样的事情可能吗?

请您参考如下方法:

你可以使用 non-greedy quantifier :

K\.(This|That).*?(\w*)\) 

或者:(如果您不希望右括号成为匹配的一部分)

K\.(This|That).*?(\w*)(?=\)) 

这样它会匹配 This|That 和单词之间的任何东西,但它是懒惰的(所以一旦它找到 \w* 的良好匹配,它就会使用它,然后回溯如果后面没有 ))