python中的re模組(正規表示式)

2021-08-06 05:08:26 字數 3735 閱讀 9113

匯入re模組(下面的小例子前兩句省略)

# -*- coding:utf-8 -*-

import re

str = 're python'

#r代表原字串,不使用原字串要注意轉義

p = re.compile(r're')

print type(p)

m = p.match(str)

print m.groups()

print m.span()

print m.string

輸出結果

re

(0, 2)

re python

字元匹配.

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

[…]例如[0-9a-za-z]匹配字符集

\d或\d

匹配數字/非數字

\s或\s

匹配空白/非空白字元

\w或\w

匹配單詞字元[a-za-z0-9]/(空格)非單詞字元

注意下面這個轉義的使用

m = re.match(r'\[[\w]\]','[a]')

print m.group()

輸出結果為:

[a]

字元匹配*

匹配前乙個字元0次或者無限次

+匹配前乙個字元1次或者無限次

?匹配前乙個字元0次或者1次

/匹配前乙個字元m次或者m到n次

*?/+?/??

匹配模式變為非貪婪(盡可能少匹配字元)

下面是上述匹配的一些小例子,有助於更好的理解多個字元匹配:

m = re.match(r'[a-z][a-z]','aaaaa')

print m.group()

//aa

m = re.match(r'[a-z][a-z]*','aaaaa')

print m.group()

//aaaaa

m = re.match(r'[a-z][a-z]+','aaaaa')

print m.group()

//aaaaa

#匹配python變數名(以下劃線,字元開頭)

m = re.match(r'[_a-za-z]+[_\w]*','_ht8')

print m.group()

//_ht8

m = re.match(r'[_a-za-z]+[_\w]*','ath')

print m.group()

//ath

#匹配0-99

m = re.match(r'[1-9]?[0-9]','99')

print m.group()

//99

m = re.match(r'[1-9]?[0-9]','19')

print m.group()

//19

m = re.match(r'[1-9]?[0-9]','9')

print m.group()

//9

#前乙個字元沒有0,所以後面的沒有匹配

m = re.match(r'[1-9]?[0-9]','09')

print m.group()

//0#匹配qq郵箱或者163郵箱

m = re.match(r'[a-za-z0-9]@163.com','[email protected]')

print m.group()

m = re.match(r'[0-9][a-z]*?','1ad12343')

print m.group()

//1

m = re.match(r'[0-9][a-z]+?','1ad12343')

print m.group()

//1a

m = re.match(r'[0-9][a-z]??','1ad12343')

print m.group()

//1

字元匹配^

匹配字串開頭

$匹配字串結尾

\a或\z

指定的字串匹配必須出現在開頭有/結尾

匹配小例子:

# -*- coding:utf-8 -*-

import re

#匹配163郵箱

m = re.match(r'^[\w]@163.com$','[email protected]')

print m.group()

m = re.match(r'\axuna[\w]*','xunalove123')

print m.group()

//xunalove123

字元

匹配匹配左右任意乙個表示式

(ab)

括號中表示式作為乙個分組

\引用編號為num的分組匹配到的字串

(?p)

分組起乙個別名

(?p=name)

引用別名為name的分組匹配字串

演示小例子

m = re.match(r'abc|d','abc')

print m.group()

//abc

#匹配0-99組成的任意字串

m = re.match(r'[1-9]?\d$','99')

print m.group()

//99

m = re.match(r'[1-9]?\d$','9')

print m.group()

//9

m = re.match(r'[1-9]?\d$|100','100')

print m.group()

//100

#匹配郵箱

m = re.match(r'[\w]?@(163|126|qq).com','[email protected]')

print m.group()

m = re.match(r'<([\w]+>)\1','book>')

print m.group()

//book>

m = re.match(r'<([\w]+>)[\w]+python')

print m.group()

//python

m = re.match(r'<(?p[\w]+>)[\w]+python')

print m.group()

//python

match方法是用頭開始匹配的。

更新:python通過re模組提供對正規表示式的支援。使用re的一般步驟是先使用re.compile()函式,將正規表示式的字串形式編譯為pattern例項,然後使用pattern例項處理文字並獲得匹配結果(乙個match例項),最後使用match例項獲得資訊,進行其他的操作。

在尋找乙個字串中所有的英文本元:

import re

pattern = re.compile('[a-za-z]')

result = pattern.findall('ashdsfdhfvdvshadgweu1324358703475821')

print result

# ['a', 's', 'h', 'd', 's', 'f', 'd', 'h', 'f', 'v', 'd', 'v', 's', 'h', 'a', 'd', 'g', 'w', 'e', 'u']

python 正則re模組

1.正則各種字元表示的含義 預設匹配除 n之外的任意乙個字元,若指定flag dotall,則匹配任意字元,包括換行 匹配字元開頭 匹配 號前的字元0次或多次,re.findall ab cabb3abcbbac 結果為 abb ab a 匹配前乙個字元1次或多次,re.findall ab ab ...

正則re模組

匹配任意乙個字元 以某個字元開頭 以某個字元結尾 匹配0次或多次 匹配一次或多次 匹配0次或1次 匹配n次 匹配n次或多次 匹配n次到m次 字符集,非 a z 匹配小寫字母a到z的任意字母一次 a z 匹配除了小寫字母a到z之外的任意字元一次 d 匹配數字0 9,0次或多次 d匹配任何十進位制數,0...

re正則模組

1.正規表示式的常用符號 預設匹配除 n之外的任意乙個字元,若指定flag dotall,則匹配任意字元,包括換行 匹配字元開頭,若指定flags multiline,這種也可以匹配上 r a nabc neee flags re.multiline 匹配字元結尾,或e.search foo bfo...