我已经看过HOWTO和re
模块文档好几次了,我仍然对Python regex中的可选性和分组如何交互感到困惑。我想要的是匹配组内的所有内容,或者根本不匹配,但是我发现子字符串是匹配的。下面是一个最小的例子:
>> re.compile(r"(test)?").search("tes")
<_sre.SRE_MATCH at 0xBlahBlah>
我希望不匹配,因为我将整个字符串test
标记为可选。我不明白什么(部分文件)??在
下面是一个更接近我实际感兴趣的问题:
^{pr2}$为什么空白没有被强制匹配?在
编辑2017-01-04 到目前为止的答案是有帮助的,但我认为我没有足够清楚地解释我的需要。在
简而言之,我想要一个正则表达式,它将匹配foo
或{
>> m = re.compile("(foo|bar)(\sbaz)?")
>> m.search("foo ba")
<_sre.SRE_Match as 0xBlahblah>
>> m.search("foo ba").span()
(0, 3)
所以我看到发生的是它在foo
上匹配,然后不关心下游的情况。如何使它只在baz
上匹配或根本不匹配?在
让我们看看匹配的是什么:
它是空字符串。为什么?在
因为
?
这里的意思是零次或一次(就像{0, 1}
)。所以第一组可以匹配字符串test
或空字符串(我们有)。在以下是docs中的一句话:
对于这两种情况下的
?
,您是说您希望组中出现0次或1次。所以在"(test)?"
中,要么将“test”与“not match”匹配,或者一个空字符串,这将是字符串的第一部分。在在第二个例子中,
"(distance|mileage)(\sbetween)?"
你有四个匹配的“distance”、“miliety”或“distance between”或“milegeries between”。在但这些都不必是整个字符串,所以可以在测试之前或之后进行测试。否则,如果只希望开始,则需要}只匹配结尾,或者最后
^regex
,或者{^regex$
只匹配整个字符串。在对于你所描述的,我认为你不想使用可选匹配。我想你想要的是你拥有的正则表达式,但是没有
?
。在对于第一个例子:
对于第二个例子:
^{pr2}$相关问题 更多 >
编程相关推荐