python,詳說正規表示式(對常用的關鍵字元的講解)
模組re
{
re模組提供了一個正規表示式引擎的介面,可以讓你將REstring編譯在物件並用它們來進行匹配
}
疑問:字串前加r的作用,反斜槓就不會被任何特殊處理
{
編譯標誌-flages
dotall[s],使匹配包括換行在內的所有字元
ignorecase[I],使匹配對大小寫不敏感
locale[L],做本地化識別(locale-aware)匹配法語等
multiline[M],多行匹配,影響^和$
varbose[X],能夠使用REs的verbose狀態,使之被組織得更清晰易懂
}
1.[…]用來表示一組字元,單獨列出:[io] 匹配 `i`,或`o`
import re
s=`tip top`
r=r`t[io]p`
a=re.findall(r,s)
print a
[…]如果匹配的是個範圍,可以這個寫[0-9a-zA-B]表示0到9並a到z並A到B
2.^ ⑴不在[]中的字元:[^io] 匹配除了i,o之外的字元
import re
s=`tip top`
r=r`t[^io]p`
a=re.findall(r,s)
print a
⑵匹配開頭的字串
import re
s=`ahello hello`
r=r`^hello`
a=re.findall(r,s)
print a
3.$ 匹配後面的字串
import re
s=`hello hello`
r=r`hello$`
a=re.findall(r,s)
print a
4.[…^…] *”除了寫在開頭地方” *和[..$…]或[$…]或[…$]這個沒有什麼作用,只會當作一般字元來處理
5.如果匹配字串abc,就會出現問題,因為是特殊字元
import re
s=`^abc ^abc ^abc`
r=r`^abc`
a=re.findall(r,s)
print a
出現上面問題,可以這樣解決,通過一個轉義字元
import re
s=`^abc ^abc ^abc`
r=r`^abc`
a=re.findall(r,s)
print a
6.
-反斜槓排布可以加不同的字元以表示不同特殊意義
-也可以用於出汙泥而不染所有的元字元:[或
⑴d匹配任何十進位制數,它相當於類[0-9]
⑵D匹配任何非數字字元,它相當於類[^0-9]
⑶s匹配任何空白字元,它相當於類[
fv]
⑷w匹配任何字母數字字元,它相當於類[a-zA-Z0-9]
⑸W匹配任何非字母數字字元,它相當於類[^a-zA-Z0-9]
7.重複問題
如果你匹配一個電話號碼,對於個數,你重複使用d是很麻煩的,這個怎麼解決
import re
n=`18829789854`
r=r`^1dddddddddd`
print re.findall(r,n)
解決辦法:使用{number},number表示重複次數
import re
n=`18829789854`
r=r`^1d{10}$` #對於電話號碼前面和後面不能現出現別的字元,所以使用^和$
print re.findall(r,n)
8.* 指定前一個字元可以被匹配零次或更多次,而不是隻有一次。匹配引擎會試著重複儘可能我的次數(不超過整數辦公室範圍,20億)
import urllib,re
h=urllib.urlopen(`http://www.baidu.com`)
s=h.read()
r=`www.w*.com` #兩個.之間想匹配多個字母或數字
li=re.findall(r,s)
for i in li:
print i
9.+ 這和*的區別就是,這個最少一次也就是,匹配前面的字元(次數>=1),所有對於網址匹配,就應該使用+號
import urllib,re
h=urllib.urlopen(`http://www.baidu.com`)
s=h.read()
r=`www.w+.com` #兩個.之間不會出現0次
li=re.findall(r,s)
for i in li:
print i
10.? ⑴表示前面的符號重複一次或零次
⑵表示最小匹配數,如果想得到ab的最短匹配
import re
s=`abbbbbbb`
r=r`ab+`
print re.findall(r,s)
最短:
import re
s=`abbbbbbb`
r=r`ab+?`
print re.findall(r,s)
還有一個作用:
import re
r=r`(?:d{1}){2}` #讓組裡面的內容連著再次
s=`fas14214jiojoi2412`
str_re=re.compile(r)
print str_re.findall(s)
11.如果想匹配前面的符號有一定的範圍的話就使用{m,n}
import re
s=`abbbb`
r=r`ab{1,3}` #表示b的次數出現1次到3次,包括1和3
print re.findall(r,s)
12.如果你的正規表示式,反覆使用就先提前編譯好,這樣可以提高執行效率,程式碼如下
import re
r=re.compile(r`ab`) #把正規表示式提前編譯好
print r.findall(字串)
13.如果在匹配的時候,想大小寫都可以匹配的話,在編譯的時候可以這樣
- re.compile(正規表示式,re.I) #re.I表示忽略大小寫
14.方法
- match() 決定RE是否在字串起始的位置匹配
- search() 掃描字串,找到這個RE匹配的第一次的位置 #前兩個返回的是一個物件,如果想看到結果
import re
s=` aab`
r=re.compile(r`ab`)
t=r.search(s)
print t.group()
goups()分組
import re
r=r`(d)w*(d)`
s=`fas14214jiojoi2412`
str_re=re.compile(r)
str_object=str_re.search(s)
print str_object.groups() #以元組輸出分組的結果
- findall() 找到RE匹配的所有子串,並把它們作為一個列表返回
- finditer() 找到RE匹配的所有子串,並把它們作為一個迭代器返回 #返回一個迭代器物件
15.MatchObject(match物件)
- group() 返回被RE匹配的字串
- start() 返回匹配開始的位置
- end() 返回匹配結束的位置
- span() 返回一個元組包含匹配(開始,結束)的位置
16.如果想把某個符合正規表示式的字串替換,怎樣做?
import re
s=` aab`
r=re.compile(r`ab`)
t=r.sub(`AB`,s) #`AB`是把符合正規表示式的字元換掉
print t
還有一個函式,subn()返回字串,並且返回更改的個數
17.想把符合正規表示式的內容分割
import re
s=` 1+2-3*4/5`
r=re.compile(r`[+-*/]`) #因為+-*都是特殊字元所有要加上
t=r.split(s)
print t
18 .(點) 匹配任意字元,除了換行符,當re.DOTALL標記被指定時,則可以匹配包括換行符的任意字元。
19.如果匹配的時候,遇到
等轉義字元時,正則不會認為是轉義字元,所有在編譯的時候,這樣做
re.compile(正規表示式,re.S)
import re
r=re.compile(r`.net`,re.S)
print r.findall(`
net`)
19.如果對多行字串的處理的話,可以使用到re.M,比如:對於檔案處理
import re
s=```
ab
abc
abcd
```
r=re.compile(r`^a`,re.M)
print r.findall(s)
18.對於正規表示式,寫在多行時,就要使用re.X
import re
rn=r```
a
```
s=`a`
r=re.compile(rn,re.X)
print r.findall(s)
19.分組,對於字串片段進行選擇,使用(…|…|….)
例項1:
import re
s=`www.baidu.cn`
r=re.compile(r`www.w+.(com|cn)`,re.X)
print r.match(s)
如果使用findall()進行匹配時,會出現下面現象
import re
s=`www.baidu.cn`
r=re.compile(r`www.w+.(com|cn)`,re.X)
print r.findall(s)
結果:
[`cn`]
返回了分組的內容
例項2:
import re
s=`name=1 name=2`
r=re.compile(r`name=(d)`,re.X)
print r.findall(s)
結果:
[`1`, `2`]
相關文章
- Python正規表示式常用函式詳解Python函式
- 正規表示式中常用的元字元字元
- Sed 命令詳解 正規表示式元字元字元
- 詳解 Python 正規表示式Python
- Python正規表示式詳解Python
- js正規表示式常用函式詳解(續)JS函式
- Python 正規表示式模組詳解Python
- Python正規表示式精講Python
- 詳解正規表示式
- 正規表示式詳解
- 正規表示式教程之匹配單個字元詳解字元
- 正規表示式教程之匹配一組字元詳解字元
- Python正規表示式 findall函式詳解Python函式
- 正規表示式關鍵詞解析
- 常用的正規表示式大全(數字、字元、固定格式)字元
- Java正規表示式的解釋說明Java
- 正規表示式 ^元字元字元
- 正規表示式 $ 元字元字元
- 正規表示式元字元字元
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- 正規表示式 字元和字元類字元
- 正規表示式?:用法詳解
- Java 正規表示式詳解Java
- grep正規表示式詳解
- 常用正規表示式
- 正規表示式需要轉義的字元字元
- 正規表示式中的特殊字元(轉)字元
- Python3之正規表示式詳解Python
- Python 之 RE(正規表示式)常用Python
- JS常用正規表示式及驗證時間的正規表示式JS
- 常用有效的正規表示式【轉】
- 正規表示式 \v 元字元字元
- 正規表示式 \f 元字元字元
- 正規表示式 \B 元字元字元
- 正規表示式 \xnn元字元字元
- 正規表示式 \b元字元字元
- 正規表示式 \D 元字元字元
- 正規表示式 \s 元字元字元