正則表達式

正則表達式

分類

BRE:基本正則表達式,grep,sed,vi等軟件支持,vim有擴展

ERE:擴展正則表達式,egrep,grep -E sed ?r

PCRE:幾乎所有的高級語言都是PCRE的方言或則變種,

基本語法

元字符metacharater

. ?匹配除換行符外任意一個字符

[abc]字符集合,只能表示一個字符的位置,匹配所包含的任意一個字符,[abc]匹配plaina

[^abc] 字符集合,只能表示一個字符的位置。匹配除集合內的。

[a-z]字符范圍,也是個集合,表示一個字符位置,匹配所包含的任意一個字符

[^a-z]字符范圍,除去集合所包含的

\b單詞的邊界 \bb在文本中找到單詞b開頭的b字符

\B不匹配單詞的邊界,

\d 匹配一位0-9的數字

\D匹配一位0-9非數字

\s匹配一位空白字符[\f\r\t\n\v]

\S匹配一位非空白字符

\w匹配[0-9A-Za-z]包括中文字符

\W匹配除\w之外的字符

轉義

凡是在正則表達式中油特殊含義的符號,如果想使用它的本意,請使用\轉義。反斜線自身得使用\\

\r\n還是轉義后代表回車換行

重復

*表示前面的正則表達式會重復0次:e\w*單詞中e后面可以有非空白字符

+表示前面的正則表達式至少重復一次:e\w+單詞中e后面只至少有一個非空白字符

?表示前面的正則表達式會重復0次或則一次:e\w? 單詞中e后面至多有一個非空白字符

{n}重復固定的n次:

{n,}至少重復n

{n,m}重復nm

X|y ?匹配x或者y

(pattern) 使用小括號指定一個子表達式,也叫分組,可以改變優先級

\數字 ?匹配對應的分組

(?:pattern)如果僅僅為了了改變優先級,就不需要分組

(?<name>exp)(?’name’exp)分組捕獲,但是可以通過name訪問分組Python語法必須是(?<name>exp

(?=exp)零寬度正預測先行斷言,斷言exp一定在匹配的右邊出現,也就是說斷言后邊一定跟個exp

零寬度正回顧后發斷言,斷言exp一定出現在匹配的左邊出現,也就是說前面一定有個exp前綴

(?!exp)零寬度負預測先行斷言,斷言exp一定不會出現在右側,也就是說斷言后面一定不會出現exp

(?<!exp)零寬度負回顧后發斷言,斷言exp一定不能出現在左側,也就是說斷言前面一定不能是exp

(?#comment) 注釋 f(?=00)(?#這個后斷言不捕獲)

注意:

斷言會不會捕獲呢?也就是斷言會不會占用分組號呢

斷言不會占用分組號,斷言如同條件,只是要求匹配必須瞞足斷言的條件

?

分組和捕獲不是同一個意思

使用正則表達式,能用簡單表達式,就不要用復雜的表達式

?

貪婪豫非貪婪

默認是貪婪模式,也就是說盡量匹配更長的子串

非貪婪很簡單,再重復的符號后面加上一個?就盡量的少匹配了

引擎選項

Ignorecase 匹配時忽略大小寫 re.l

Singleline 單行模式。可以匹配所有字符,包括\n re.S

Multiline 多行模式^行首 $行尾 re.M

lgnorePatternwhitespace 忽略表示中的空白字符,如果要使用空白字符,如果要是用空白字符用轉義,#可以用來做注釋 re.X

編譯

re.compile(pattern,flags=0)

設定flags,編譯模式,返回正則表達式對象regex

Pattern就是正則表達式字符串,flags是選項,正則表達式需要被編譯,為了提高效率,這些編譯后的結果被保存,下次使用同樣的pattern的時候,就不需要再次編譯。

re的其他方法為了提高效率調用的編譯方法。就是為了提速

Re.match(pattern,string,flags=0)

match匹配從字符串的開頭匹配,regex對象match方法可以重設定開始位置和結束位置。返回match對象

re.search(pattern,string,flags=0)

從開頭搜索直到第一個匹配,reges對象search方法可以重設開始位置和結束位置,返回match對象

re.fullmatch(pattern.string,flags=0)

Regex.fullmatch(string[,pos[,endpos]])

整個字符串和正則表達式匹配

re.findall(pattren,string,flags=0)

Regex.findall(string[,pos[,endpos]])

對整個字符串,從左到右匹配,返回所有匹配項的列表

re.finditer(pattren.string,flags=0)

Regex.finditer(string,[,pos[,endpos]])

對整個字符串,從左至右匹配,返回所有的匹配項,返回迭代器

注意每次迭代返回的是match對象。

re.sub(pattern,replacement,string,count=0,flags=0)

Regex.sub(replacement,string,count=0)

使用pattern對字符串string進行匹配,對匹配選項使用repl替換,可以是子串,寒素,bytes

分割字符串

字符串的分割函數,太難用,不能指定多個字符串進行分割

re.split(pattern,string,maxsplit=,flags=0)

re.split分割字符串

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97675

(0)
zhangmengzhangmeng
上一篇 2018-05-07 09:19
下一篇 2018-05-07 09:29

相關推薦

欧美性久久久久