對於比較複雜的字串處理任務,需要依靠正規表示式。
首先需要匯入 re 模組
import re
常用的元字元
符號含義
.匹配除 「\n」 和 「\r」 之外的任何單個字元。
^匹配字串開始位置
$匹配字串結束位置
*前面的元素重複0次,1次或多次
?前面的元素重複0次或1次
+前面的元素重複1次或多次
前面的元素出現了n次
前面的元素至少出現n次
前面的元素出現的次數介於n-m之間
( )進行分組,輸出括號中的部分
常用的通用字元
符號含義
\s匹配空白字元
\w匹配任意字母/數字/下劃線
\w匹配任意字母/數字/下劃線以外的字元
\d匹配十進位制數字
\d匹配十進位制數字以外的值
[0-9]
匹配乙個0~9之間的數字
a-z匹配小寫英文本母
a-z匹配大寫英文本母
常用的函式
search
search方法能夠找出子串第乙個匹配位置
import re
s ='hello world. hello world.'
key_word =
'world'
# 找到後返回re.match object
r = re.search(key_word, s)
# 返回乙個元組包含匹配 (開始,結束) 的位置
r.span(
)
match
match從原字串的開始位置匹配(search函式是從任意位置匹配)
finditer
匹配迭代器
返回所有匹配位置的迭代器
返回物件是 re.match, 可以使用 span() 方法找到它的開始和結束位置
import re
s ='hello world. hello world.'
key_word =
'world'
r = re.finditer(key_word, s)
for i in r:
print
(i.span(
))
findall
re.findall遍歷匹配,可以獲取字串中所有匹配的字串,返回乙個列表
re.i
re.i是方法的可選引數,表示忽略大小寫。
s =
"that"
pat =
"t"r = re.finditer(pat, s, re.i)
for i in r:
print
(i.span(
))
split
字串中的split函式只能分割簡單的情況
如果字串的分隔符有, ; \t |
words = re.split(r'[,\s;|]+'
, s)
sub
替換匹配到的字串
content =
"hello world, hello world"
# 要替換的部分
pattern = re.
compile
(r'world'
)m=pattern.sub(
"kitty"
, content)
compile
預編譯方法,如果要用同一匹配模式進行多次匹配,可以使用compile預先編譯串,可以提公升執行效率
貪心捕獲與非貪心捕獲
(.*) 表示捕獲任意多個字元,盡可能多的匹配字元,要找到最後乙個匹配的,把中間部分返回,也被稱為貪心捕獲
(.*?)非貪心捕獲,找到第乙個匹配後返回,把中間部分返回,稱為非貪心捕獲
import re
s ='s2sss1.02sssss5s'
pattern = r'\d+\.?\d*'
r = re.findall(pattern, s)
第乙個數為大於1-9
第二個為0-9,可以存在或不存在
import re
s =[-16
,1.02,5
,0,127
, a]
pattern = r"^[1-9]\d*$"
[i for i in s if re.match(pattern,
str(i)
)]
正規表示式的測試** Python re 正則模組
有些字元比較特殊,它們和自身並不匹配,而是會表明應和一些特殊的東西匹配,或者它們會影響到 re 其它部分的重複次數,它們叫元字元。其中 m 和 n 是十進位制整數。該限定符的意思是至少有 m 個重複,至多到 n 個重複。舉個例子,a b 將匹配 a b a b 和 a b 它不能匹配 ab 因為沒有...
python re正則模組詳解
正規表示式 regular expression 描述了一種字串匹配的模式 pattern 可以用來檢查乙個串是否含有某種子串 將匹配的子串替換或者從某個串中取出符合某個條件的子串等。構造正規表示式的方法和建立數學表示式的方法一樣。也就是用多種元字元與運算子可以將小的表示式結合在一起來建立更大的表示...
python re模組與正則
正規表示式中的轉義符在python的字串中也剛好有轉移的作用,但是正規表示式中的轉義符和字串中的轉義符並沒關係,且還容易有衝突。為了避免這種衝突,我們所有的正則都以在工具中的測試結果為結果,然後只需要在正則和待匹配的字串外面都加r即可 print n n print n n print r n n ...