上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匹配可能还不够,后续会有更多讲解。