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次

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

原文地址:https://www.cnblogs.com/kaituorensheng/p/3421906.html