- Python進階編程:編寫更高效、優雅的Python代碼
- 劉宇宙 謝東 劉艷
- 516字
- 2021-04-30 12:39:40
2.4.1 字符串搜索替換
在實際工作中,我們經常需要在字符串中搜索和匹配指定的文本模式。
對于簡單的字符串,直接使用str.replace()函數即可,示例如下:
text_val = 'life is short, I use python, what about you' print(text_val.replace('use', 'choice'))
對于復雜的模式,我們需要用re模塊中的sub()函數。如將形式為11/27/2012的日期字符串改成2012-11-27,代碼(replace_search.py)示例如下:
text_date = 'Today is 04/21/2020. Python2 stop maintain from 01/01/2020.' import re print(re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text_date))
執行py文件,輸出結果如下:
Today is 2020-04-21. Python2 stop maintain from 2020-01-01.
sub()函數中的第一個參數是被匹配的模式,第二個參數是替換模式。反斜杠數字比如\3指向前面模式的捕獲組號。
如果相同的模式要做多次替換,應先編譯以提升性能,示例如下:
date_pat = re.compile(r'(\d+)/(\d+)/(\d+)') print(date_pat.sub(r'\3-\1-\2', text_date))
對于更復雜的替換,可以傳遞一個替換回調函數執行替換操作,示例如下:
from calendar import month_abbr def change_date(group_val): mon_name = month_abbr[int(group_val.group(1))] return f'{group_val.group(2)} {mon_name} {group_val.group(3)}' print(date_pat.sub(change_date, text_date))
一個替換回調函數的參數是一個match對象,也就是match()或者find()方法返回的對象。group()方法用來提取特定的匹配部分。替換回調函數最后返回替換字符串。
如果我們除了想知道替換后的結果外,還想知道發生了多少替換,可以使用re.subn()方法來代替回調函數,代碼(replace_search.py)示例如下:
new_text, rep_num = date_pat.subn(r'\2-\1-\2', text_date) print(f'after replace text:{new_text}') print(f'replace value num:{rep_num}')
執行py文件,輸出結果如下:
after replace text:Today is 21-04-21. Python2 stop maintain from 01-01-01. replace value num:2
關于正則表達式的搜索和替換,示例中的sub()方法基本已經涵蓋了所有。對于正則表達式的使用,最難的部分是編寫正則表達式模式,這需要讀者自己多加練習。
推薦閱讀
- 數據科學實戰手冊(R+Python)
- Unity 2020 Mobile Game Development
- PyTorch Artificial Intelligence Fundamentals
- HTML5+CSS3基礎開發教程(第2版)
- Hadoop+Spark大數據分析實戰
- Python完全自學教程
- Learning AngularJS for .NET Developers
- Test-Driven Machine Learning
- Hands-On GUI Programming with C++ and Qt5
- 算法超簡單:趣味游戲帶你輕松入門與實踐
- 量子計算機編程:從入門到實踐
- Beginning PHP
- Distributed Computing with Python
- Python深度學習與項目實戰
- Apache Kafka 1.0 Cookbook