python正規表示式(二 )

2021-09-24 18:05:09 字數 3976 閱讀 3882

re模組

匯入re模組

import re

match方法

result = re.match(正規表示式,要匹配的字串)

result.group()

字元 功能

.匹配任意1個字元(除了\n)

[ ]匹配[ ]中列舉的字元

\d匹配數字,即0-9

\d匹配非數字,即不是數字

\s匹配空白,即 空格,tab鍵

\s匹配非空白

\w匹配單詞字元,即a-z、a-z、0-9、_

\w匹配非單詞字元

示例1字元 .:可以匹配容易字元(除了\n)

ret = re.match(「t.o」,「tio」)

print(ret.group())

ret = re.match(「t.o」,「two」)

print(ret.group())

執行結果

tiotwo

示例2字元 [ ]:匹配[ ]例舉的字元

import re

et = re.match("[hh]",「hello python」)

print(et.group())

aret = re.match("[hh]",「hello python」)

print(aret.group())

eret = re.match("[hh]ello python",「hello python」)

print(eret.group())

執行結果

hello python

hello python

hello python

示例3字元\d:匹配數字0-9

ret = re.match(「嫦娥1號」,「嫦娥1號發射成功」)

print(ret.group())

ret = re.match(「嫦娥\d號」,「嫦娥2號發射成功」)

print(ret.group())

執行結果

嫦娥1號,嫦娥1號發射成功

嫦娥2號,嫦娥2號發射成功

示例4:

import re

ret = re.match("[a-za-z0-9_]",「12a3g45678」)

print(ret.group())

ret = re.match("[a-za-z0-9_]",「1ad12f23s34455ff66」)

print(ret.group())

執行結果:

12a3g4

1ad12f23s34455ff66

字元功能

*匹配前乙個字元出現0次或者無限次,即可有可無

+匹配前乙個字元出現1次或者無限次,即至少有1次

?匹配前乙個字元出現1次或者0次,即要麼有1次,要麼沒有

匹配前乙個字元出現m次

匹配前乙個字元出現從m到n次

示例1** : 匹配前乙個字元出現0次或者無限次,可有可無*

ret = re.match("[a-z][a-z]*",「aabcdef」)

print(ret.group())

執行結果

aabcdef

示例2字元+:匹配前乙個字元出現1次或者無限次,即至少有1次

import re

names = [「name1」, 「_name」, 「2_name」, 「name」]

for name in names:

ret = re.match("[a-za-z_]+[\w]*",name)

if ret:

print(「變數名 %s 符合要求」 % ret.group())

else:

print(「變數名 %s 非法」 % name)

執行結果

變數名 name1 符合要求

變數名 _name 符合要求

變數名 2_name 非法

變數名 name 符合要求

示例3字元?:匹配前乙個字元出現1次或者0次,即要麼有1次,要麼沒有

import re

ret = re.match("[1-9]?[0-9]",「7」)

print(ret.group())

ret = re.match("[1-9]?\d",「33」)

print(ret.group())

ret = re.match("[1-9]?\d",「09」)

print(ret.group())

示例4字元:匹配前乙個字元出現m次

import re

ret = re.match("[a-za-z0-9_]",「12a3g45678」)

print(ret.group())

ret = re.match("[a-za-z0-9_]",「1ad12f23s34455ff66」)

print(ret.group())

字元功能

^匹配字串開頭

$匹配字串結尾

案例1^: 匹配字串開頭

案例2$: 匹配字串結尾

import re

email_list = [「[email protected]」, 「[email protected]」, "[email protected]"]

for email in email_list:

ret = re.match("[\w]@163.com$", email)

if ret:

print("%s 是符合規定的郵件位址,匹配後的結果是:%s" % (email, ret.group()))

else:

print("%s 不符合要求" % email)

執行結果:

[email protected] 是符合規定的郵件位址,匹配後的結果是:[email protected]

[email protected] 不符合要求

[email protected] 不符合要求12

3**^: 匹配字串開頭 **

import re

email_list = [「[email protected]」, 「[email protected]」, "[email protected]"]

for email in email_list:

ret =re.match(「[email protected]」, email)

if ret:

print("%s 是符合規定的郵件位址,匹配後的結果是:%s" % (email, ret.group()))

else:

print("%s 不符合要求" % email)

執行結果

[email protected] 是符合規定的郵件位址,匹配後的結果是:[email protected]

[email protected] 是符合規定的郵件位址,匹配後的結果是:[email protected]

[email protected] 不符合要求

ret = re.search(r"\d+", 「閱讀次數為 9999」)

ret.group()

ret = re.findall(r"\d+", 「python = 9999, c = 7890, c++ = 12345」)

print(ret)

功能:將匹配到的閱讀次數加1

方法一import re

ret = re.sub(r"\d+", 『998』, 「python = 997」)

print(ret)

import re

方法二def add(temp):

strnum = temp.group()

num = int(strnum) + 1

return str(num)

ret = re.sub(r"\d+", add, 「python = 997」)

print(ret)

ret = re.sub(r"\d+", add, 「python = 99」)

print(ret)

python正規表示式(二)

re模組的用法 1 re.s可以匹配轉義符 re.findall k.n darken dark nn 只輸出第乙個darken中的ken re.findall k.n darken dark nn re.s 不僅輸出darken中的ken,還輸出了dak nn中的k nn 2 re.m匹配多行 r...

Python 正規表示式(二)

這次的正規表示式學習談一談選擇符和子模式 可選項和重複子模式 在字串的各個字元都不相同的請胯下,字符集是比較好用的,但是如果只想匹配特定的字串,那麼字符集就不合適了,這裡就可以使用管道符號 比如我們只想匹配字串 python 和 perl 我們可以使用正則 python perl 但是有時候我們不需...

python正規表示式(二)

python的正規表示式支援大量的擴充套件符號 通過使用 ilmsux 系列,使用者可以在正規表示式裡面指定乙個或者多個標記,而不是通過compile 或者其他re模組函式。下面使用re.i ignorecase的示例,最後乙個示例在re.m multiline實現多行混合。import re re...