zoukankan      html  css  js  c++  java
  • python 正则表达式应用——缩写词扩充

    看具体示例

    import re
    def expand_abbr(sen, abbr):
        lenabbr = len(abbr)
        ma = '' 
        for i in range(0, lenabbr):
            ma += abbr[i] + "[a-z]+" + ' '
        print 'ma:', ma
        ma = ma.strip(' ')
        p = re.search(ma, sen)
        if p:
            return p.group()
        else:
            return ''
    
    print expand_abbr("Welcome to Algriculture Bank China", 'ABC')

    分析

    缩写词  FEMA

    分解为  F*** E*** M*** A***

    规律     大写字母 + 小写(大于等于1个)+ 空格

    参考代码

     

    问题    

     以上分析对于示例前三个是可以的,但是后三个出现问题了,大写字母开头的扩充词里夹杂这小写字母

    解决

    缩写词  FDA

    分解为  F*** (**)? E*** (**)?  M*** (**)? A*** 

                  其中(**)?表示小写字母组合出现一次或不出现

    规律   大写字母 + 小写(大于等于1个)+ 空格 + [小写+空格](0次或1次)

    参考代码

    import re
    def expand_abbr(sen, abbr):
        lenabbr = len(abbr)
        ma = '' 
        for i in range(0, lenabbr-1):
            ma += abbr[i] + "[a-z]+" + ' ' + '([a-z]+ )?'
        ma += abbr[lenabbr-1] + "[a-z]+"
        print 'ma:', ma
        ma = ma.strip(' ')
        p = re.search(ma, sen)
        if p:
            return p.group()
        else:
            return ''
    
    print expand_abbr("Welcome to Algriculture Bank of China", 'ABC')

    语法

    ?   匹配前边一次或0次

    ()作为一个分组,后边可以加量词,表示匹配的次数

  • 相关阅读:
    XML操作
    C# 相等(==,Equals)
    VS插件 选项卡竖排列
    springcloud版本号
    @EnableDiscoveryClient和@EnableEurekaClient的区别
    在mvn构建时直接将项目jar包做成服务第三方工具
    java引用的强制转型
    java基础类型的byte为长度
    springboot访问服务器本地静态文件的方法
    nginx反向代理和负载均衡的基本配置
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/3421906.html
Copyright © 2011-2022 走看看