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'
总结上面的解决办法:精妙啊!!!