re庫的使用

2021-10-02 13:03:46 字數 1858 閱讀 5203

如果直接給出字元,就是精確匹配。用\d可以匹配乙個數字,\w可以匹配乙個字母或數字

s1='00\d'#可以匹配'007',但是匹配不了'00a'

s2='\d\d\d'#可以匹配'010'

s3='\w\w\w'#可以匹配'py3'

s4='\s'#空格

s1='py.'#'pyc','pyo','py2'
符號功能*

任意個字元,包括0個

+至少乙個字元

?0個或者1個字元

n個字元

n-m個字元

#010-12345

s='\d\-\d'#-是特殊字元要加轉義\

表示範圍

字串表示

[0-9a-za-z_]

匹配乙個數字,字母或者下劃線

[0-9a-za-z_]+

至少匹配乙個由數字、字母或者下劃線所組成的字串

[a-za-z_][0-9a-za-z_]*

字母開頭,數字或字母或下劃線構成的字串

alb匹配a或者b

^行的開頭,^/d必須以數字開頭

$行的結束,\d$表示以數字結尾

轉義的問題

s='abc\\-001'#python的字串

#對應的正規表示式字串變成

#'abc\-001'

#不考慮轉義問題

s=r'abc\-001'

# 對應的正規表示式字串不變:

# 'abc\-001'

判斷是否匹配

test = '使用者輸入的字串'

if re.match(r'正規表示式', test):

print('ok')

else:

print('failed')

>>>s='a b  c'

>>>re.split(r'\s+',s)

>>>['a','b','c']

>>>s='a,b;; c d'

>>>re.split(r'[\s\,\;]+',s)

>>>['a','b','c']

()代表了分組

^(\d)-(\d)$

>>> m = re.match(r'^(\d)-(\d)$', '010-12345')

>>> m

<_sre.sre_match object; span=(0, 9), match='010-12345'>

>>> m.group(0)

'010-12345'

>>> m.group(1)

'010'

>>> m.group(2)

'12345'

注意到group(0)永遠是原始字串,group(1)、group(2)……表示第1、2、……個子串。

正則匹配預設是貪婪匹配,也就是匹配盡可能多的字元。

>>>re=match(r'^(\d+)(0*)$','102300').groups()

>>>('102300','')

由於\d+採用貪婪匹配,直接把後面的0全部匹配了,結果0*只能匹配空字串了。

必須讓\d+採用非貪婪匹配(也就是盡可能少匹配),才能把後面的0匹配出來。

加個?就可以讓\d+採用非貪婪匹配

>>> re.match(r'^(\d+?)(0*)$', '102300').groups()

('1023', '00')

5re庫的使用

9.match物件的屬性 string 待匹配文字 re 匹配時使用的pattern物件 正規表示式 pos 正規表示式搜尋文字的開始位置 endpos 正規表示式搜尋文字的結束位置 10.match物件的方法 group 0 獲取匹配後的字串 start 匹配字串在原始字串的開始位置 end 匹配...

Python 中re庫的簡單使用

1.findall 方法 返回乙個列表 如下 import re text f open testtext.txt r encoding cp936 for each line in f text text each line f.close result re.findall a z a z a ...

Re庫的用法

python自1.5版本起增加了re模組,它提供了perl風格 perl regular expression 又叫 perl regex 簡稱 pres 的正規表示式模式,re模組使python語言擁有全部的正規表示式功能。compile函式根據乙個模式字串和可選的標誌引數生成乙個正規表示式物件,...