我需要针对多个正则表达式(独占 - 意味着匹配其中一个的字符串不能匹配任何其他)正则表达式尝试一个字符串,并根据它匹配的代码执行不同的代码段。我目前拥有的是:
m = firstre.match(str)
if m:
# Do something
m = secondre.match(str)
if m:
# Do something else
m = thirdre.match(str)
if m:
# Do something different from both
除了丑陋之外,这段代码匹配所有正则表达式,即使它匹配了其中一个(比如 firstre),这是低效的。我尝试使用:
elif m = secondre.match(str)
但了解到 if 语句中不允许赋值。
是否有一种优雅的方式来实现我想要的?
最佳答案
def doit( s ):
# with some side-effect on a
a = []
def f1( s, m ):
a.append( 1 )
print 'f1', a, s, m
def f2( s, m ):
a.append( 2 )
print 'f2', a, s, m
def f3( s, m ):
a.append( 3 )
print 'f3', a, s, m
re1 = re.compile( 'one' )
re2 = re.compile( 'two' )
re3 = re.compile( 'three' )
func_re_list = (
( f1, re1 ),
( f2, re2 ),
( f3, re3 ),
)
for myfunc, myre in func_re_list:
m = myre.match( s )
if m:
myfunc( s, m )
break
doit( 'one' )
doit( 'two' )
doit( 'three' )
关于python - 如何在 Python 中搜索正则表达式匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2028164/