官术网_书友最值得收藏!

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匹配可能還不夠,后續會有更多講解。

主站蜘蛛池模板: 鸡东县| 北宁市| 安福县| 云阳县| 河东区| 建德市| 嘉义市| 治多县| 丰县| 特克斯县| 错那县| 北川| 武乡县| 聂拉木县| 青阳县| 弥渡县| 高淳县| 虎林市| 宁乡县| 株洲市| 安新县| 安化县| 杭州市| 邯郸县| 静安区| 临武县| 资溪县| 环江| 昌邑市| 宁乡县| 敖汉旗| 邹城市| 克山县| 多伦县| 东台市| 彭阳县| 永平县| 隆子县| 扶余县| 丹凤县| 象州县|