被正则表达式所困扰(积极的前瞻性问题?)

时间:2012-06-13 19:52:30

标签: c# regex parsing

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

为了说明我在下面写了一行。其中,我希望返回两个匹配,第一个包含“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”。然后得到“)”之前的第一个单词。但是,我真的不明白我如何指定(向前看,直到你找到一个“)”,然后回溯直到你得到它背后的字。这样的事情有可能吗?

2 个答案:

答案 0 :(得分:3)

您可以使用non-greedy quantifier

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

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

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

这样它会匹配This | That和单词之间的任何内容,但它会懒得(所以一旦找到\w*的良好匹配就会使用它,如果没有{{ {1}}以下)

答案 1 :(得分:2)

如何:K\.(This|That)\(.*?(\w+)\)

这非贪婪地匹配括号之间的部分,但只要在右括号之前只剩下单词字符就停止。