美文网首页Python开发Python爱好者Python中文社区
使用Python魔术方法实现正则表达式的新语法

使用Python魔术方法实现正则表达式的新语法

作者: 远飞的大雁2010 | 来源:发表于2016-10-08 11:39 被阅读39次

    读了《用 Python 的魔术方法做出更好的正则表达式 API》 后深受启发。一直觉得Python的re模块用起来不舒服,决定按照该文的方法自已来实现一套正则表达式的语法。

    re模块中的主要功能有match、search、fullmatch、finditer、findall、split、sub等方法,其中常用的也就那么几种。

    重构后的新语法

    判断是否匹配

    if R/"\d+" == '12345':
        print("完全匹配")
    
    if R/"\d+"/"1234adfc":
        print("存在匹配的记录")
    

    第一个语法要求完整匹配,第二个只判断是否存在匹配的记录,如果需要从头匹配,可以在pattern的前面加“^”。

    查找所有匹配的记录

    for m in R/'\d+'//'123,456,789':
        print(m.group())
    

    返回的结果为Match对象,可以通过groups、group、groupdict等方法获取匹配的内容。

    搜索匹配内容

    m=R/'\d+'%'abc856fds5868'
    print(m.group())
    

    从指定的字符串中搜索第一个匹配的记录。

    查找所有匹配的内容

    for s in R/'\d+'/'123,456,679':
        print(s)
    

    返回的结果为匹配的字符串。

    拆分字符串

    for s in R/'[, |]'|'abc,def fang|jun':
        print(s)
    

    返回的结果为拆分的字符串。

    替换字符串

    s=R/'hunter'/'hunter is a good person'%'lisi'
    

    直接返回替换完成的结果。如果需要替换的次数,可以按如下的语法指定:

    s=R/'good'/'a good student is a good student'%('good',1)
    

    上面的代码只替换第一个good。

    特别提示

    针对上面所有的语法,除了指定正则表达式的模板外,还可以指定相应的flag。示例如下:

    if R/('abc','i')=='ABC':
        print('不区分大小写匹配')
    

    其中标签可以为字符串(不区分大小写),也可以为整数的标签。

    安装方法

    pip install orange-kit
    

    使用方法

    from orange import R
    
    if R/'test'=="test":
        print('完全匹配')
    
    # 以下为传统用法
    PATTERN=R/'1[3-8]\d{9}'  # 手机号的正则表达式
    s='张三 13300000001  李四 13400000005'
    
    # 查找并打印所有的手机号
    for k in PATTERN.findall(s):
        print(k)
    
    

    下载源代码

    git clone git@github.com:huangtao-sh/orange.git
    

    相关文章

      网友评论

        本文标题:使用Python魔术方法实现正则表达式的新语法

        本文链接:https://www.haomeiwen.com/subject/dspryttx.html