python中正則表達式通過re模塊實現,主要功能包括匹配、提取、替換和拆分字符串。1. 匹配基本模式用re.match(從開頭匹配)和re.search(全局搜索第一個匹配項);2. 提取數據可通過括號分組捕獲內容,使用group()獲取對應分組;3. 替換用re.sub,拆分用re.split;4. 注意事項包括轉義特殊字符、貪婪與非貪婪匹配、編譯正則提升效率及忽略大小寫等技巧。掌握這些核心函數和語法能應對大多數文本處理需求。
在python中,正則表達式主要通過re模塊來實現。它能幫助我們從字符串中提取、匹配、替換特定格式的內容。雖然初看有點復雜,但掌握幾個常用方法后,你會發現它非常實用。
匹配基本模式:用re.match和re.search
這兩個函數都可以用來查找匹配項,但有區別:
- re.match:只從字符串開頭開始匹配,適合驗證輸入格式。
- re.search:在整個字符串中搜索第一個匹配項,更靈活。
舉個例子:
立即學習“Python免費學習筆記(深入)”;
import re text = "abc123xyz" # 只匹配以abc開頭的 match_result = re.match(r"abc", text) # 匹配成功 # 搜索是否有數字 search_result = re.search(r"d+", text) # 找到123
如果你不確定目標的位置,優先使用search()。
提取數據:分組與捕獲
正則的一大用途是提取信息,比如從日志里提取IP地址、時間等。這時候需要用到括號()進行分組。
例如從一段日志中提取日期和IP:
log_line = "2024-03-15 192.168.1.100 User login" pattern = r"(d{4}-d{2}-d{2}) (d+.d+.d+.d+)" match = re.search(pattern, log_line) if match: print("日期:", match.group(1)) # 輸出:日期: 2024-03-15 print("IP地址:", match.group(2)) # 輸出:IP地址: 192.168.1.100
- group(0) 是整個匹配結果;
- group(1)、group(2) 是括號里的內容;
- 分組可以嵌套,也可以命名(如?P
)。
替換與拆分:用re.sub和re.split
- re.sub(pattern, repl, String):把匹配的部分替換成別的內容。
- re.split(pattern, string):根據正則規則拆分字符串。
比如清理多余空格:
text = "hello world, this is Python." cleaned = re.sub(r"s+", " ", text) # 把多個空格換成一個 # 結果:"hello world, this is Python."
再比如按標點符號分割句子:
sentences = re.split(r"[,.!?]", text) # 注意結果會包含空字符串,可能需要過濾掉
這些操作在處理用戶輸入、清洗數據時特別有用。
常見注意事項和技巧
- 轉義字符:像.、*、+這些符號在正則中有特殊含義,想匹配字面值要用轉義。
- 貪婪 vs 非貪婪:
- 默認是“貪婪”匹配(盡可能多),加上?變成“非貪婪”,如.*?
- 編譯正則表達式:如果同一個模式要多次使用,建議用re.compile()提升效率。
- 忽略大小寫:加參數flags=re.IGNORECASE
- 多行匹配:某些時候需要用flags=re.MULTILINE讓^和$匹配每行開頭結尾
基本上就這些了。正則表達式剛開始可能會覺得繞,但只要記住幾個核心函數和常見語法,就能應對大多數文本處理場景。不復雜但容易忽略細節,慢慢練手就好了。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END