Python进阶编程:编写更高效、优雅的Python代码
上QQ阅读APP看书,第一时间看更新

2.4.2 字符串忽略大小写的搜索替换

在实际工作中,我们经常需要搜索和替换字符串,有时还需要忽略大小写。

为了在文本操作时忽略大小写,我们需要在使用re模块的时候给这些操作提供re.IGNORECASE标志参数,示例如下:


import re
text_val = 'LEARN PYTHON3, like python, Good at Python'
print(re.findall('python', text_val, flags=re.IGNORECASE))
print(re.sub('python', 'snake', text_val, flags=re.IGNORECASE))

上面示例的最后一行有一个小缺陷,替换字符串并不会自动与被匹配字符串的大小写保持一致。这里需要一个类似如下的辅助函数,代码(ignore_case_exp.py)示例如下:


def match_case(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

上述辅助函数的格式如下:


print(re.sub('python', match_case('snake'), text_val, flags=re.IGNORECASE))

执行py文件,输出结果如下:


LEARN SNAKE3, like snake, Good at Snake

match_case('snake')返回了一个回调函数(参数必须是match对象)。前面提到过,sub()函数除了接收替换字符串外,还能接收一个回调函数。

一般情况下,对于忽略大小写的匹配操作,简单地传递一个re.IGNORECASE标志参数就足够。但对于某些需要大小写转换的Unicode匹配可能还不够,后续会有更多讲解。