为什么这个python匹配?

时间:2011-11-02 14:58:23

标签: python regex

有人可以解释python re的这种奇怪的行为吗?显然字符串'test'不包含'Bid'或'Ask'。为什么这匹配?

import re
pat=r'[Bid|Ask]'
reg=re.compile(pat)
if reg.search('test'): print "matched!"

... 匹配!

5 个答案:

答案 0 :(得分:10)

[...]定义一个字符类,匹配里面列出的任何字符。你想要的是par = r'(Bid|Ask)'

但是,根本不应该使用正则表达式,请执行以下操作:

if whatever in ('Bid', 'Ask'):
    # it's one of these two
else:
    # it isn't

如果您需要执行子字符串检查(感谢@agf):

if any(word in whatever for word in ('Bid', 'Ask')):
    # one of the words is in the sting whatever

答案 1 :(得分:5)

[...]character class matcher,这意味着它将匹配集合中的任何字符。

您可能需要更改,例如:r'(Bid|Ask)'

答案 2 :(得分:2)

你的正则表达式只是一个包含字符'B','i','d','|','A','s'和'k'的字符集。 “测试”中有's'。

你可能的意思是“(买|卖)”

答案 3 :(得分:1)

我认为你想要()而不是[]。您已告诉它匹配组Bid|Ask中的任何单个字符,字符串包含s

答案 4 :(得分:0)

你的正则表达式正在搜索字符集B,i,d,|,A,s,k。 '''匹配'test'。

您应该省略括号。

此外,如果你不想匹配像“Askify”这样的字符串,你需要更多地改进你的正则表达式。