【问题标题】:Stumped by a regex (positive lookahead issue?)被正则表达式难倒(积极的前瞻问题?)
【发布时间】:2012-06-13 19:52:29
【问题描述】:

我被一个正则表达式问题难住了。我一直在将它们用于一个项目并且它们一直运行良好,但后来我遇到了一种情况,我认为可以通过积极的前瞻性来解决,但我的尝试并没有达到我的预期。

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

【问题讨论】:

  • 我不完全理解您要做什么,但是如果您要在两个离散标记之间查找内容(不相互嵌套),那么是的,您可以使用正则表达式来做到这一点。
  • 这个问题令人困惑。你能说得更清楚点吗?
  • 请阅读这篇简短的建议worksol.be/regex.html 来改进您的问题
  • 感谢您的建议。下次我会努力做得更好。

标签: c# regex parsing


【解决方案1】:

你可以使用non-greedy quantifier:

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

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

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

这样,它会匹配 This|That 和单词之间的任何内容,但它会懒惰地这样做(所以一旦找到 \w* 的匹配项,它就会使用它,如果没有 ) 则回溯以下)

【讨论】:

  • 很好的答案,感谢您解决我不太完美的问题。非贪婪量词信息。正是我需要知道的。我对正则表达式的了解越来越多!
【解决方案2】:

怎么样:K\.(This|That)\(.*?(\w+)\)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多