首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >re.VERBOSE和前瞻性断言错误

re.VERBOSE和前瞻性断言错误
EN

Stack Overflow用户
提问于 2017-11-10 16:53:35
回答 2查看 202关注 0票数 2

我有一个详细的(re.X)标记的正则表达式,它正在抛出一个异常,尽管它似乎相当于它的精简版本。(我是从后者建造的。)

浓缩版:

代码语言:javascript
复制
import re
test = 'catdog'
test2 = 'dogcat'
pat = re.compile(r'(?=\b\w{6}\b)\b\w*cat\w*\b')

print(pat.search(test))
print(pat.search(test2))
# catdog Match object
# dogcat Match object

详细版本:

代码语言:javascript
复制
pat = re.compile(r"""(               # Start of group (lookahead); need raw string
                     ?=              # Positive lookahead; notation = `q(?=u)`
                     \b\w{6}\b       # Word boundary and 6 alphanumeric characters
                     )               # End of group (lookahead)
                     \b\w*cat\w*\b   # Literal 'cat' in between 0 or more alphanumeric""", re.X)
print(pat.search(test).string)
print(pat.search(test2).string)

# Throws exception
# error: nothing to repeat at position 83 (line 2, column 22)

是什么引起的?我找不到为什么扩展版本违反了re.X/re.VERBOSE的任何条件。从医生那里:

此标志允许您编写看起来更好看、更易读的正则表达式,方法是允许您直观地分离模式的逻辑部分并添加注释。模式中的空白将被忽略,除非在字符类中或前面有一个未转义的反斜杠。当一行包含不在字符类中且前面没有未转义反斜杠的#时,从最左边的#到行尾的所有字符都会被忽略。

据我所知,在没有转义反斜杠的情况下,没有字符类或空白。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-10 17:07:11

我是Python第15606期re在冗长模式下在令牌中使用空格的行为与文档不匹配,不能将空白放在(?=的中间。

票数 3
EN

Stack Overflow用户

发布于 2017-11-10 16:58:15

问题在于第二行的?=?可以表示多个东西,比如[ ]?,它是0或1个空格,我认为它前面的空格是这样的。空格忽略,但它正在将两个字符(?变成分离的实体。

?=移动到第一行,它就能工作了。就像(?=

误差

代码语言:javascript
复制
error: nothing to repeat at position 83

清楚地表明,?在这里被解释为重复

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47227654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档