这个包含前瞻的正则表达式的字面含义是什么?

时间:2017-12-10 18:50:23

标签: python regex

我正在努力理解积极和消极的前瞻,但我想我错过了一些东西。

q(?=u) 

我理解这个正则表达式的意思是:“匹配一个后跟一个u的q”,所以我得到一个匹配字符串“quit”,但只获得一个带有'q'的组。

但是使用正则表达式q(?= u)i,我没有得到任何字符串“quit”的结果。为什么会这样?可能这个正则表达式没有意义,但我想知道它是什么意思,以了解前瞻。

2 个答案:

答案 0 :(得分:2)

前瞻不会消耗其文本。 quq(?=u)不同 - 后者只匹配q,但要求u后面跟着q(?=u)i(但不会被捕获或消费)。

这就是q无法匹配的原因 - u需要同时跟i qi,是不可能的。换句话说,它会查找并捕获q,但前提是u后面紧跟i,如果后跟qui,则显然不是真的。

如果您想匹配qui,那么正则表达式为Thread.Sleep

答案 1 :(得分:1)

如果你想要匹配其他东西不匹配的东西,那么否定的先行是必不可少的。在解释字符类时,本教程解释了为什么不能使用否定字符类来匹配q后面跟着你。负向前瞻提供了解决方案:q(?!u)。负前瞻构造是一对括号,左括号后跟一个问号和一个感叹号。在前瞻中,我们有琐碎的正则表达式。

积极前瞻的作用是一样的。 q(?= u)匹配一个后跟u的q,而不是匹配的u部分。积极的先行构造是一对括号,左括号后跟一个问号和一个等号。

Regex lookahead, lookbehind and atomic groups