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

问题:以不区分大小写的方式对文本做查找和替换

解决方案:需要使用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'

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

    原文作者:cook__
    原文地址: https://www.jianshu.com/p/c7838396cb08
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞