Python

re.IGNORECASE --以不区分大小写的方式对文本做查找

2018-09-30  本文已影响218人  cook__
问题:以不区分大小写的方式对文本做查找和替换

解决方案:需要使用re模块并且对各种操作都要加上re.IGNORECASE标记

import re
text = 'UPPER PYTHON, lower python, Mixed Python'

re.findall('python', text, flags=re.IGNORECASE)
Out[5]: ['PYTHON', 'python', 'Python']

re.sub('python', 'java', text, flags=re.IGNORECASE)
Out[6]: 'UPPER java, lower java, Mixed java'

上面替换有个问题,待替换的文本与匹配的文本大小写不吻合。因此需要用到一个支撑函数来修正这个问题:

def matchcase(word):
    def replace(m):
        text = m.group()
        if text.isupper():
            return word.upper()
        elif text.islower():
            return word.lower()
        elif text[0].isupper():
            return word.capitalize()
        else:
            return word
    return replace

re.sub('python', matchcase('java'), text, flags=re.IGNORECASE)  # 会自动把正则模式传给replace(m)函数
Out[10]: 'UPPER JAVA, lower java, Mixed Java'

总结上面的解决办法:精妙啊!!!

上一篇下一篇

猜你喜欢

热点阅读