首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python re模块-使用'or‘时的重复符号限制

Python re模块-使用'or‘时的重复符号限制
EN

Stack Overflow用户
提问于 2012-12-14 03:08:04
回答 2查看 77关注 0票数 1

我有个问题。假设有这样的模式:

代码语言:javascript
复制
>>> import re
>>> pt ='^a{1,2}$'
>>> re.search(pt, 'aa') # looks ok
<_sre.SRE_Match object at 0x020B2288>
>>> re.search(pt, 'aaa') # ok too
>>>

现在,让我们尝试查找与另一个模式匹配的内容:

代码语言:javascript
复制
>>> pt = '^a{1,2}|x$'
>>> re.search(pt, 'a') # this one looks ok
<_sre.SRE_Match object at 0x020B25D0>
>>> re.search(pt, 'aaax') # (1) Now this one?
<_sre.SRE_Match object at 0x020B2288>
>>> re.search(pt, 'aaaaaax') # (2) and this one?
<_sre.SRE_Match object at 0x020B25D0>
>>> re.search(pt, 'aaa') # (3) and this one?
<_sre.SRE_Match object at 0x020B25D0>

(1)(2)(3)对我来说,它看起来应该匹配以一个或两个'a‘或一个'x’开头的字符串,或者两个组合,并在这些字母之间结束,而不是其他。或者我什么都搞不懂?是否应该这样呢?就像你使用'|‘时,它忽略了{}中的限制?有人能给我解释一下吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-14 03:10:59

$受分组的影响。您的正则表达式被解释为(^a{1,2})|(x$),它匹配“字符串开头的一个或两个”或“字符串末尾的一个x”。如果您希望将|仅应用于as和X,则需要对它们进行分组:

代码语言:javascript
复制
pt = '^(a{1,2}|x)$'

或者,如果您不想捕获组,请使用非捕获组:

代码语言:javascript
复制
pt = '^(?:a{1,2}|x)$'

编辑:我不确定我明白你想要匹配的是什么,但也许可以试试:

代码语言:javascript
复制
pt = '^(a{1,2}x?|x)$"
票数 2
EN

Stack Overflow用户

发布于 2012-12-14 03:11:40

^foo|bar$^foobar$匹配。

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

https://stackoverflow.com/questions/13866696

复制
相关文章

相似问题

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