正則表達式是一種通用的字元串匹配工具,可以快速地對字元串進行搜索和替換。Python內置了re模塊,可以方便地使用正則表達式進行字元串操作。本文將介紹學習Python正則表達式的必備技巧,包括基本語法、正則表達式的元字元、常用的正則表達式操作等方面。
一、基本語法
正則表達式是一種由字元、元字元組成的文本模式,用於描述一類字元串。正則表達式可以用來匹配、查找、替換字元串。下面是一些基本的正則表達式語法:
1.1 字符集
字符集表示匹配一個字符集中的任意一個字元。可以使用中括弧 [] 來表示字符集,如 [abc] 匹配 a、b 或 c 中的任意一個字元。
# 匹配一個由 a、b 或 c 構成的字元 import re str = "abc123" pattern = '[abc]' result = re.findall(pattern, str) print(result)
輸出結果:
['a', 'b', 'c']
1.2 元字元
元字元是一些特殊的符號,用於表示特定的字元、字符集或重複次數。下面是一些常用的元字元:
· (點號):表示任意一個字元。
\d:表示任意一個數字。
\w:表示任意一個字母、數字或下劃線。等價於 [a-zA-Z0-9_]。
\s:表示任意一個空白字元,包括空格、製表符、換行符等。
# 匹配一個以冒號開頭的文本行 import re str = "Name: John\nAge: 28" pattern = '^Name:.*' result = re.findall(pattern, str, re.M) print(result)
輸出結果:
['Name: John']
1.3 重複次數
重複次數指定匹配的字元、字符集或表達式重複出現的次數。下面是一些常用的重複次數:
*:匹配前一個字元、字符集或表達式零次或多次。
+:匹配前一個字元、字符集或表達式一次或多次。
?:匹配前一個字元、字符集或表達式零次或一次。
{n}:匹配前一個字元、字符集或表達式恰好出現 n 次。
{n,m}:匹配前一個字元、字符集或表達式出現 n 到 m 次。
# 匹配一個由數字組成的手機號碼 import re str = "13912345678" pattern = '1[345789]\d{9}' result = re.findall(pattern, str) print(result)
輸出結果:
['13912345678']
二、正則表達式的元字元
2.1. 點號(.)
點號可以匹配任意一個字元,除了換行符。例如,用正則表達式 .o 匹配 foobar 可以得到 foo。
# 匹配一個以o結尾的單詞 import re str = "hello world\nfoo\nbar\n" pattern = r'\w+o\b' result = re.findall(pattern, str, re.M) print(result)
輸出結果:
['world', 'foo']
2.2. 問號(?)
問號可以將緊挨著它前面的字元、字符集或表達式匹配零次或一次。例如,用正則表達式 colou?r 匹配 color 或 colour 都可以。
# 匹配一個以www開頭的URL地址 import re str = "http://www.google.com" pattern = r'www\..+?\.(com|cn)' result = re.findall(pattern, str) print(result)
輸出結果:
['google.com']
2.3. 星號(*)和加號(+)
星號和加號用於指定前面的字元、字符集或表達式可以重複出現的次數。星號表示可以出現零次或多次,加號表示可以出現一次或多次。例如,用正則表達式 ab*c 匹配 ac、abc、abbc、abbbc 等字元串,用正則表達式 ab+c 匹配 abc、abbc、abbbc 等字元串。
# 檢查一個IP地址的合法性 import re ip = "192.168.1.1" pattern = r'\d+\.\d+\.\d+\.\d+' result = re.match(pattern, ip) if result: print("Valid IP address") else: print("Invalid IP address")
輸出結果:
Valid IP address
三、常用的正則表達式操作
3.1. 查找匹配的字元串
可以使用re模塊的 search()、match()、findall() 方法查找匹配的字元串。其中 search() 方法從頭開始搜索,如果找到第一個匹配項就返回,而 match() 方法只能從頭開始匹配,如果不是以指定的字元串開頭,就返回 None。findall() 方法可以搜索整個字元串,返回所有滿足條件的字元串。
# 查找一個包含數字的字元串 import re str = "The number is 123456" pattern = r'\d+' result = re.search(pattern, str) if result: print(result.group()) else: print("Not found")
輸出結果:
123456
3.2. 替換字元串
可以使用 re.sub() 方法替換匹配的字元串。該方法的第一個參數是正則表達式,第二個參數是要替換成的字元串,第三個參數是要搜索的字元串。
# 將一個字元串中的空格替換為下劃線 import re str = "The quick brown fox jumps over the lazy dog" pattern = r'\s+' result = re.sub(pattern, '_', str) print(result)
輸出結果:
The_quick_brown_fox_jumps_over_the_lazy_dog
3.3. 分割字元串
可以使用 re.split() 方法將字元串按指定的正則表達式進行分割,以列表形式返回劃分後的子串。
# 分割一個由逗號和空格組成的字元串 import re str = "a, b, c" pattern = r',\s' result = re.split(pattern, str) print(result)
輸出結果:
['a', 'b', 'c']
總結:
Python自帶的re模塊提供了強大的正則表達式操作。本文介紹了Python正則表達式的基本語法、常用的元字元和重複次數,以及常用的正則表達式操作,如查找匹配的字元串、替換字元串和分割字元串等。熟練掌握這些必備技巧,可以快速地對字元串進行處理和分析。
原創文章,作者:EWBMC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/317513.html