如何在Python中匹配精确的“多个”字符串
我有一份需要在某个字符串中查找的确切模式列表。目前我用的方法很糟糕。
pat1 = re.compile('foo.tralingString')
mat1 = pat1.match(mystring)
pat2 = re.compile('bar.trailingString')
mat2 = pat2.match(mystring)
if mat1 or mat2:
# Do whatever
pat = re.compile('[foo|bar].tralingString')
match = pat.match(mystring) # Doesn't work
唯一的条件是,我有一组字符串需要完全匹配。用Python有什么好的解决方案吗?
补充说明:这些搜索模式有一些共同的后缀。
5 个回答
2
在你的正则表达式中使用'|'。它的意思是“或者”。如果你想要处理字符串,还有更好的方法,可以使用re.escape这个功能。
pat = re.compile('|'.join(map(re.escape, ['foo.tralingString','bar.tralingString','something.else'])))
10
你说得对,使用 |
是正确的,但你用的是字符类 []
,而不是子模式 ()
。试试这个正则表达式:
r = re.compile('(?:foo|bar)\.trailingString')
if r.match(mystring):
# Do stuff
旧的回答
如果你想要精确匹配子字符串,就不应该使用正则表达式。
可以试试用 in
来代替:
words = ['foo', 'bar']
# mystring contains at least one of the words
if any(i in mystring for i in words):
# Do stuff
32
你可以写一个简单的正则表达式,把这两个结合起来:
pat = re.compile('foo|bar')
if pat.match(mystring):
# Do whatever
然后你可以扩展这个正则表达式,做你需要的事情,使用 |
这个符号(在正则表达式中表示或)
编辑:根据你最近的修改,这个应该能满足你的需求:
pat = re.compile('(foo|bar)\\.trailingString');
if pat.match(mystring):
# Do Whatever
[]
是一个字符类。所以你的 [foo|bar]
会匹配包含一个这些字符的字符串(因为在字符类后面没有 *、+ 或 ?)。()
是用来包裹子模式的。