2.6 å—符串忽略大å°�写的æ�œç´¢æ›¿æ�¢Â¶
问题¶
ä½ éœ€è¦�以忽略大å°�写的方å¼�æ�œç´¢ä¸Žæ›¿æ�¢æ–‡æœ¬å—符串
解决方案¶
为了在文本æ“�作时忽略大å°�å†™ï¼Œä½ éœ€è¦�在使用 re 模å�—的时候给这些æ“�作æ��ä¾› re.IGNORECASE æ ‡å¿—å�‚数。比如:
>>> text = 'UPPER PYTHON, lower python, Mixed Python'
>>> re.findall('python', text, flags=re.IGNORECASE)
['PYTHON', 'python', 'Python']
>>> re.sub('python', 'snake', text, flags=re.IGNORECASE)
'UPPER snake, lower snake, Mixed snake'
>>>
最å�Žçš„那个例å�æ�示了一个å°�缺陷,替æ�¢å—符串并ä¸�会自动跟被匹é…�å—符串的大å°�写ä¿�æŒ�一致。 为了修å¤�è¿™ä¸ªï¼Œä½ å�¯èƒ½éœ€è¦�一个辅助函数,就åƒ�下é�¢çš„è¿™æ ·ï¼š
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('snake'), text, flags=re.IGNORECASE)
'UPPER SNAKE, lower snake, Mixed Snake'
>>>
译者注: matchcase('snake') 返回了一个回调函数(�数必须是 match 对象),��一节�到过,
sub() 函数除了接å�—替æ�¢å—符串外,还能接å�—一个回调函数。
讨论¶
对于一般的忽略大å°�写的匹é…�æ“�作,简å�•çš„ä¼ é€’ä¸€ä¸ª re.IGNORECASE æ ‡å¿—å�‚数就已ç»�足够了。
但是需�注�的是,这个对于�些需�大�写转�的Unicode匹��能还�够,
�考2.10�节了解更多细节。