python正則表達式

正則表達式
^行首錨定 $行尾錨定
.匹配任意字符一次
\w匹配非空白字符一次
\s匹配空白字符一次
\d匹配數字一次
*表示前面的正則表達式會重復0到多次
+匹配前面的字符重復0到多次
.+ 相當于匹配多次任意字符,至少一次
\w+相當于匹配非空字符一到多次
?前面的字符匹配一次或不匹配

有一個上面兩種類似的{}表示前面的字符出現次數
{1,}相當于+ {0,1}相當于? {n}重復n次 {m,n}重復m到n次
{0,}不相當于* ,因為它匹配到的多個字符必需是重復的

\b匹配邊界 邊界指的是匹配的一邊是空格或換行(制表符也是空格)另一邊不是空格或換行
‘ {1,}\bab’ 比配ab前面至少一個空格 ‘\bc’匹配字符c前面是個空格或換行

多個符號聯合使用,匹配一般都是盡可能多的匹配(對*而言)
匹配是從前往后開始匹配,一段滿足會打印后再從當前位置開始繼續
a.b.*ab 匹配 ‘ adb erabqw ab’會取到’adb erabqw ab’
貪婪模式與非貪婪模式,這個都是針對重復匹配的符號而言的
*盡可能多的匹配字符,.*盡可能多的匹配任意字符,非貪婪模式*?可以匹配前面字符任意次,但盡量少的匹配
+盡可能多匹配前面的字符或表達式,至少一次,非貪婪模式+?匹配前面字符字少一次,但匹配次數要滿足后面的條件就截止了
?匹配0次或者一次,非貪婪模式??能不匹配前面的字符就不匹配(匹配也只能匹配一次)這個的非貪婪模式實際用處不大
{n,}匹配前面的字符盡可能多次,且不少于n次,非貪婪模式{n,}?匹配前面字符至少n次,但滿足了后面的匹配條件了就截止
{n,m}匹配前面字符n次到m次,但盡量多的匹配,非貪婪模式{n,m}?匹配前面的字符n到m次,但盡量少的匹配

其他標識符
\B 匹配不是邊界,本身不占字符 t\B匹配t的后面不是邊界(空格) \Bt匹配t的前面不是邊界
i\Bt 相當于匹配 it i\B t 不可能匹配得到
\D 匹配非數字
\S匹配非空白字符
\W匹配\w外的字符

[]匹配字符之一 [abc] [0b]

結構符號
‘|’ 或者符號
分組
(pattern)表達式\1 表示重復匹配前面的內容 1為默認的分組號
python中 (?P<name>exp) 分組捕獲,但是可以通過name訪問

斷言
表達式(?=exp) 斷言表達式右邊出現exp
(?<=exp)表達式 斷言表達式左邊有exp
(?!exp) (?<!exp)

 

正則表達式使用
模塊 re
類方法 result =re.match() re.search() re.fullmatch() re.findall() re.finditer() .split() .groud .sub()
對象方法 對re類的對象使用 regex =re.compile(‘正則表達式’)
result= regex.match() regex.search() regex.fullmatch()
regex.findall() regex.finditer()
它們的方法大部分都公有,使用后的執行效果也差不多,有的可能用的很少占不列出

匹配模式 re.M多行模式 re.S依然從頭開始找(默認模式)

類方法 result =re.func(‘正則表達式’,待匹配的字符串,[匹配模式])

對象方法 regex =re.compile(‘正則表達式’,[匹配模式])生成對象
result =func(待匹配的字符串)

re.match(‘b’,s) 默認從索引0開始匹配s,沒有匹配到返回空,無法設置
打印result值 <_sre.SRE_Match object; span=(0, 1), match=’b’>
re.compile(‘b’) 設置從索引10,開始匹配,返回值一樣
match(s)

re.search(‘b’,s) 從0開始匹配到第一個滿足表達式,返回與match類似,對象方法可以設置起始索引
<_sre.SRE_Match object; span=(8, 9), match=’a’>
search(s,10)

re.fullmatch() 全長匹配

regex.fullmatch(s,4,5) 匹配區間全長匹配

re.findall(‘正則’,s) regex.findall(s) 返回多次match匹配的結果的列表

re.finditer(‘正則’,s) regex.finditer(s) 返回迭代器, 迭代后返回match的對象

re.match() .split() .sub

 

匹配電子郵箱
^\w[\w\.-]+@\w[\w\.-]+\.[a-zA-Z]+

匹配html標記
<a[^<>]*href=[“‘]?([^”‘]+)[“‘]?[^<>]*>

匹配URL
(\w+)://([\S]+)

切割文本單詞
lst =re.split(‘[^-\w]+’,s)

d =defaultdict(lambda :0)
for line in f:
for sub in re.split(‘[^-\w]+’,line):
if len(sub) >0:
d[sub] +=1

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

(0)
daishitongdaishitong
上一篇 2017-11-06 20:38
下一篇 2017-11-07 15:02

相關推薦

  • python數據類型及其函數方法歸納總結

    數據類型的分類: ?數值型: int ,float, complex, bool ? ? 序列對象: 字符串,列表,元組tuple ? ? 鍵值型 集合set,字典dict 如果按照可hash性來分類 hashable(可哈希性) An object is hashable if it has a hash value which never changes…

    2017-10-09
  • Python內建函數

    內建函數 標識id() 返回對象的唯一標識,CPython返回內存地址 哈希hash() 返回一個對象的hash值 類型type() 返回對象的類型 類型轉換 int()、float()、bin()、hex()、oct()、bool()、list()、tuple()、dict()、set()、complex()、bytes()、bytearray() 輸入i…

    2018-04-08
  • Python模擬java的do while循環

    在java中有這樣的語句: do{    //dosomething}while(條件A); 在python中沒有do-while這樣的語法,這也是python中“解決一個問題最好只有一個方法”的體現,那么python中怎么模擬do-while語句呢?可以這樣: while True:  &nbsp…

    Python干貨 2015-03-08
  • 函數

    函數 數學定義:y=f(x),y是x的函數,x是自變量 Python函數 有若干個語句塊,函數名稱,參數列表構成,它是組織代碼的最小單元 完成一定作用 函數的作用 結構化編程對代碼的最基本的封裝,一般按照功能組織一段代碼 封裝的目的為了復用,減少了冗余代碼 代碼更加簡潔美觀,更加易讀 函數的分類 內建函數,如max(),reversed()等 庫函數,如ma…

    2018-04-16
  • Python文件操作

    計算機體系架構 運算器:完成各種算術運算、邏輯運算、出具傳輸等數據加工處理 控制器:控制程序的執行 CPU = 運算器 + 控制器 存儲器:用于記憶程序的數據,內存 輸入設備:將數據或程序輸入到計算機中 輸出設備:將數據或程序的處理結果展示給用戶 文件IO常用操作 open 打開 read 讀取 write 寫入 close 關閉 readline 行讀取 …

    Python筆記 2018-05-02
  • 調試你的Python代碼

    調試你的Python代碼 譯自: http://howchoo.com/g/zgi2y2iwyze/debugging-your-python-code 作者: Ashley     當你不得不更新別人的代碼時,你有多少次陷入這樣一種境地?如果你是一個開發團隊的一員,那我猜一定多于你愿意的次數。 結果我們發現Pytho…

    Python干貨 2015-03-23
欧美性久久久久