Python正则表达式,使用OR

时间:2014-11-28 11:34:39

标签: python regex

我对Python的问题有疑问操作者:

以下正则表达式,其中我在|的选项中使用多个字符运算符给出了预期的结果:

>>> ps = "^[23|45]"
>>> p = re.compile(ps)
>>> p.match("23")
<_sre.SRE_Match object at 0x0000000001EE0370>

另外,当我在|:

中使用1个字符的选项时,我可以添加字符串结尾符号
>>> ps = "^[2|4]$"
>>> p = re.compile(ps)
>>> p.match("2\n")
<_sre.SRE_Match object at 0x0000000001EE0440>

但是当我尝试在|中使用多字符选项时我没想到匹配的比赛:

>>> ps = "^[23|45]$"
>>> p = re.compile(ps)
>>> p.match("23\n")
>>> ps = "^[2|4]$"

另外,我尝试使用&#34; \ n&#34;字符而不是&#34; $&#34;,&#34;搜索&#34; -method而不是&#34;匹配&#34;,但无济于事。 如何使最后一个正则表达式起作用?

2 个答案:

答案 0 :(得分:1)

^[23|45]$将匹配给定列表中的单个字符,即匹配2或3或|45。 Anchors断言该行必须只有一个字符。所以这将匹配我之前提到的只有一个字符的所有行。

$字符之前还存在\n。所以这个re.match(r'^[2|3]$', '2\n')会给你一个匹配。

>>> ps = "^[23|45]"
>>> p = re.compile(ps)
>>> p.match("23")
<_sre.SRE_Match object at 0x0000000001EE0370>

上面的代码会给你一个匹配,因为^起始锚,[23|45]给定列表中的任何一个字符。我们的输入为23,因此它与第一个2匹配,最后它会为您提供匹配,并请注意,这不会与整个文本23匹配。要匹配字符串2345,您必须将模式包含在捕获或非捕获组中,而不是在字符类中。

r"^(23|45)$"

答案 1 :(得分:0)

在{23 | 45] |[]内无用,并且充当|而不是or运算符的掌控者。 请改用(?:23|45)。 此外,[23]将匹配23。内部字符类中的sequnce无关紧要。

第一个示例适用于字符类[23|45],因此2 or 3将匹配(此处仅2匹配。如果您使用^[23|45]$,则无法获得匹配项。第三个不匹配,因为\n不在字符类中。