python - 如何在 Python 中搜索正则表达式匹配项?

标签 python regex switch-statement

我需要针对多个正则表达式(独占 - 意味着匹配其中一个的字符串不能匹配任何其他)正则表达式尝试一个字符串,并根据它匹配的代码执行不同的代码段。我目前拥有的是:

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/

相关文章:

javascript - 如何检测字符串的特定范围是否在换行符中?

c# - Regex 和 span 类如何在此代码中工作?

python - 如何在Python中使用字典代替if语句?

python - 如何查找列表A中也在列表B中的项目的索引

python - 使用 FastAPI 计算全局变量的请求数

python:将 nan 分配给 Dataframe 的行

python - NumPy 版本的 "Exponential weighted moving average",相当于 pandas.ewm().mean()

java - 需要 java 正则表达式来匹配具有多个空格的子字符串,只有一个标点符号

c# - Try-Catch 语句结束 While 循环读取 C# 中的 XML 文件

c# - 如何在枚举 C# 中使用 switch 语句