我有一个我想在给定字符串中搜索的确切模式列表.目前我对这样的问题有一个非常糟糕的解决方案.
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
Run Code Online (Sandbox Code Playgroud)
唯一的条件是我有一个完全匹配的字符串列表.什么是Python中最好的解决方案.
编辑:搜索模式有一些共同的尾随模式.
irc*_*ell 20
你可以做一个简单的正则表达式,结合这两个:
pat = re.compile('foo|bar')
if pat.match(mystring):
# Do whatever
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用|分隔符(这意味着或使用正则表达式语法)扩展正则表达式以执行您需要的任何操作
编辑:根据您最近的编辑,这应该为您做:
pat = re.compile('(foo|bar)\\.trailingString');
if pat.match(mystring):
# Do Whatever
Run Code Online (Sandbox Code Playgroud)
这[]是一个角色类.所以你[foo|bar]会将一个字符串与一个包含的字符匹配(因为在课后没有*或+或?). ()是子图案的外壳.
你正确使用,|但你使用的是字符类[]而不是子模式().试试这个正则表达式:
r = re.compile('(?:foo|bar)\.trailingString')
if r.match(mystring):
# Do stuff
Run Code Online (Sandbox Code Playgroud)
老答案
如果你想做精确的子串匹配,你不应该使用正则表达式.
请尝试使用in:
words = ['foo', 'bar']
# mystring contains at least one of the words
if any(i in mystring for i in words):
# Do stuff
Run Code Online (Sandbox Code Playgroud)