日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中的re模块和正则表达式基础

發布時間:2024/4/15 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的re模块和正则表达式基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1.正則匹配基礎知識

(1)通配符.

.只匹配一個字符

>>> re.findall("p.ckname","piiickname-pockname") ['pockname']

如果要匹配.等特殊字符,要使用注意字符\

>>> re.findall("p.ckname","pickname--p.ckname") ['pickname', 'p.ckname'] >>> re.findall("p\.ckname","pickname--p.ckname") ['p.ckname']

?

(2)字符集[],只能匹配單個字符,匹配多個見(4)

[a-z] 可以匹配a-z之間任意一個字符?

[a-zA-Z0-9]匹配a-z,A-Z,0-9的任意一個字符

[^p]反轉匹配,可以匹配除了p的一個字符串,注意是使用[ ]括起來的,和(5)區分出來

#例子

>>> re.findall("p[a-z]ckname","piickname-pockname") ['pockname'] >>> re.findall("p[a-z]*ckname","piickname-pockname") ['piickname', 'pockname']

? >>> re.findall("p[^o]ckname","pickname-pockname")
? ['pickname'] ? ?@反轉匹配

?

(3)選擇符 | 相當于或

>>> re.findall("name|test","pickname-testpy")
['name', 'test']

?

(4)可選項,注意()的使用

()?子模式出現0次或者1次

()*子模式出現0次或者多次

()+子模式出現1次或者多次

(){m,n}子模式出現m-n次

在這個模式下注意一下findall和search的結果

>>> aa=re.search("(name){2}","myname--mynamename--my") >>> print aa.group() namename>>> re.findall("my(name){2}","myname--mynamename--my") ['name'] 這里匹配不到namename,需要進一步理解re的幾個函數區別

?

舉個例子r'(http://)?(www\.)?baidu\.com'

匹配結果:http://www.baidu.com

????????????? http://baidu.com

????????????? www.baidu.com

????????????? baidu.com

(5)開頭和結尾

^只想在字符串的開頭匹配http? ^http

$只想在字符串的結尾匹配http? http$

?

?這里要區分下不以http開頭的string怎么寫呢?

[^http]要寫在[ ?]里面

?

?

?

2.re模塊

re.compile()

可以把正則表達式編譯成一個正則表達式對象。可以把那些經常使用的正則表達式編譯成正則表達式對象,這樣可以提高一定的效率。

text="hello,meixiaoer!"

pa=re.compile('h')

pa.match(text)?

pa.findall(text)

pa.search(text)

結果:<_sre.SRE_Match object at 0x01ADF100>

???????? ['h']

???????? <_sre.SRE_Match object at 0x01A6EDE8>

?re.match()

嘗試從字符串的開始匹配一個模式,只匹配一個!

re.match('h',text)??? 結果是<_sre.SRE_Match object at 0x01ADF090>

re.match('e',text)??? 結果是none

要是想打印出匹配字符可以這樣

m=re.match('h',text)?

print m.group(0)???? 結果是h

re.search() ?只匹配一個!

函數會在字符串內查找模式匹配,直到找到第一個匹配然后返回,未匹配返回none

>>> re.search('e',text)
<_sre.SRE_Match object at 0x01ADF100>

打印元素

>>> m=re.search('e',text)
>>> print m.group(0)
e

因為只匹配第一個元素,所以第二個元素會報錯

>>> m=re.search('e',text)
>>> print m.group()
IndexError: no such group

re.findall()查找多有符合的元素,匹配所有,返回列表

?

>>> re.findall("name","name-myname-yourname") ['name', 'name', 'name'] >>> re.findall("^name","name-myname-yourname") ['name'] 因為^name正則表達式是從開始匹配的,可以理解下

?另一個例子更清楚的看清三個函數的區別

#只有findall可以查找所有的 f=re.findall('[0-9]','2fff4') print f #['2','4'] 返回結果是列表 s=re.serach('[0-9]','fff45')//查找第一個符合的以后就停止查找了 print s.group() #4 m=re.match('[0-9]','fff45') //從第一個字符開始匹配,符合以后就停止查詢 print m.group() #None m=re.match('[0-9]','1fff45') print m.group() #1

?

?###########一些常用的使用場景#################

?1.

#使用()進行分組 #不使用(),表示表達式是一個組,就要使用group(0) m=re.match(r'\d{3}-\d{3,8}','010-12345') print m.group(0) #010-12345,ps特殊符號一遍要使用\-但是-這里不使用也可以 #如果使用(),表示表達式是有n個組的,所以要使用groups() m=re.match(r'(\d{3})-(\d{3,8})','010-12345') print m.groups()#('010', '12345') print m.group(0)#010-12345 默認組0,組0包含整個字符串 print m.group(1)#010 組1包含第一個()內的正則 print m.group(2)#123456 組2包含第二個()內的正則

2. 分割字符應用  

p=re.compile(r'd+') p.split('one1two22three333four') #['one', 'two', 'three', 'four']

兩種方法,先compile后,就不用每次都運行compile了

ss="hello,what,is,,,,,,your,,name" import re sss=re.split('[,]+',ss) print sss#等同于 pa=re.compile('[,]+') aaa=pa.split(ss) print aaa

?

3替換應用,最突出的就是和組結合使用

re.sub()

?

4貪婪匹配

將貪婪比配轉換成非貪婪模式?,這里注意?的位置啊

ss='*mili*is*great*' #貪婪模式 pa=re.compile(r'\*(.+)\*') print pa.match(ss).group(0) #*mili*is*great* 世界只想匹配*mili*,貪婪盡可能多的東西匹配


#非貪婪模式,匹配到就停止
pa1=re.compile(r'\*(.+?)\*') #這里注意下?的位置啊(.+)?這個?指的是0次或者1次,不一樣的 print pa1.match(ss).group(0) #*mili*

?

5 re.sub替換,模式替換

#替換re.sub強大之處就在于替換中使用組號,默認整個字符創是group(0),\1第一個()group(1) #re.sub(pa,repl,string,count=0) 用repl替換pa匹配的地方 print help(re.sub) ss='hello, *world*' pa=re.compile(r'\*([^\*]+)\*') #匹配不以*開頭的字符串,^需要[^]使用 print re.sub(pa,'hahahaha',ss) #hello, hahahaha pa1=re.compile(r'\*([^\*]+)\*') print re.sub(pa,r'<h1>\1</h1>',ss) #\1第一個()group(1) hello, <h1>world</h1>

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/xueli/p/3709560.html

總結

以上是生活随笔為你收集整理的python中的re模块和正则表达式基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。