如何在Python中匹配精确的"多个"字符串

Neo*_*Neo 13 python regex

我有一个我想在给定字符串中搜索的确切模式列表.目前我对这样的问题有一个非常糟糕的解决方案.

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]会将一个字符串与一个包含的字符匹配(因为在课后没有*或+或?). ()是子图案的外壳.


Bol*_*ock 7

你正确使用,|但你使用的是字符类[]而不是子模式().试试这个正则表达式:

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)