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

歡迎訪問 生活随笔!

生活随笔

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

python

Python基础-re模块

發布時間:2025/4/14 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python基础-re模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正則就是用一些具有特殊含義的符號組合在一起(成為正則表達式)來描述字符或字符串的方法.或者說:正則就是用來描述一類事物的規則.它嵌套在Python中,并通過re模塊實現,正則表達式模式被編譯成一系列的字節碼,然后用C編寫的匹配引擎執行.

元字符

\w 匹配字母(包含中文)或數字或下劃線

\W 非 \w的

import re s = re.findall('\w','123euiooj--=,..') print(s) 運行結果: ['1', '2', '3', 'e', 'u', 'i', 'o', 'o', 'j'] s = re.findall('\W','123euiooj--=,..') print(s) 運行結果: ['-', '-', '=', ',', '.', '.']

\s匹配任意的空白符

\S 匹配 非\s

s = re.findall('\s','nihao, my world ') print(s) 運行結果: [' ', ' ', ' '] s = re.findall('\S','nihao, my world ') print(s) 運行結果: ['n', 'i', 'h', 'a', 'o', ',', 'm', 'y', 'w', 'o', 'r', 'l', 'd']

\d匹配數字

\D匹配非\d

s = re.findall('\d','nihao123456') print(s) 運行結果: ['1', '2', '3', '4', '5', '6'] s = re.findall('\D','nihao123456') print(s) 運行結果: ['n', 'i', 'h', 'a', 'o']

\A從字符串開頭匹配

s = re.findall('\An','nnnihao123456') print(s) 運行結果: ['n']

?

\Z匹配字符串的結束,如果是換行,只匹配到換行前的結果

s = re.findall('n\Z','ihao123456n') print(s) 打印結果: ['n']

\n匹配一個換行符

s = re.findall('\n','ihao123456n\n') print(s) 打印結果: ['\n']

\t匹配一個制表符

s = re.findall('\n\t','ihao123456n\n\t') print(s) 打印結果: ['\n\t']

^匹配字符串的開始

s = re.findall('^a','aaaihao123456n') print(s)--跟\A功能類似 打印結果:['a']

$匹配字符串的結尾

s = re.findall('a$','ihao123456naaaa') print(s)--跟\Z功能類似 打印結果: ['a']

. 匹配任意字符,除了換行符,當re.dotall標記被指定時,則可以匹配包括換行符的任意字符

s = re.findall('.','ihao123456naa\n') print(s) 打印結果: ['i', 'h', 'a', 'o', '1', '2', '3', '4', '5', '6', 'n', 'a', 'a']

.可以匹配任意字符,那就說明必須至少有1個字符

print(re.findall('a.b', 'ab aab a*b a2b a牛b a\nb')) 打印結果: ['aab', 'a*b', 'a2b', 'a牛b']

當re.DOTALL被指定時,可以匹配換行符

print(re.findall('a.b','ab aab a*b a2b a牛b a\nb',re.DOTALL)) 打印結果: ['aab', 'a*b', 'a2b', 'a牛b', 'a\nb']

[...]匹配字符組中的字符

print(re.findall('a[abc]b', 'aab abb acb adb afb a_b')) 打印結果: ['aab', 'abb', 'acb']

[0-9]代表數字0到9的數字,[a-z]代表小寫字母,[A-Z]代表大寫字母

print(re.findall('a[0-9]b', 'a1b a3b aeb a*b arb a_b')) 打印結果: ['a1b', 'a3b']

- 在[]中表示范圍,如果想要匹配上- 那么這個-符號不能放在中間

print(re.findall('a[-*+]b', 'a-b a*b a+b a/b a6b')) 打印結果: ['a-b', 'a*b', 'a+b']

[^...]匹配除了字符組中的字符的所有字符

print(re.findall('a[^a-z]b', 'acb adb a3b a*b')) 打印結果: ['a3b', 'a*b']

*匹配0個或多個左邊的字符

print(re.findall('a*b', 'ab aab aaab abbb')) 打印結果: ['ab', 'aab', 'aaab', 'ab', 'b', 'b'] print(re.findall('ab*', 'ab aab aaab abbbbb')) 打印結果: ['ab', 'a', 'ab', 'a', 'a', 'ab', 'abbbbb']

+匹配一個或多個左邊的字符

print(re.findall('a+b', 'ab aab aaab abbb')) 打印結果: ['ab', 'aab', 'aaab', 'ab']

?匹配0個或者1個左邊的字符,非貪婪方式

print(re.findall('a?b', 'ab aab abb aaaab a牛b aba**b')) 打印結果: ['ab', 'ab', 'ab', 'b', 'ab', 'b', 'ab', 'b']

{n}精準匹配n個前面的表達式

print(re.findall('a{2}b', 'ab aab aaab aaaaabb')) 打印結果: ['aab', 'aab', 'aab']

{n,m}匹配n到m次由前面的正則表達式定義的片段,貪婪方式

print(re.findall('a{2,4}b', 'ab aab aaab aaaaabb')) 打印結果: ['aab', 'aaab', 'aaaab']

a|b匹配a或者b

print(re.findall('a|b','alex_sb ale123_sb wusir12_sb wusir_sb ritian_sb')) 打印結果: ['a', 'b', 'a', 'b', 'b', 'b', 'a', 'b'] print(re.findall('alex|太白|wusir', 'alex太白wusiraleeeex太太白odlb')) 打印結果: ['alex', '太白', 'wusir', '太白']

()匹配括號內的表達式,也表示一個組,分組

print(re.findall('([a-z]+)_sb','alex_sb ale123_sb wusir12_sb wusir_sb ritian_sb')) 打印結果: ['alex', 'wusir', 'ritian']

()制定一個規則,將滿足規則的結果匹配出來,只顯示括號里面的

print(re.findall('(.*?)_sb', 'alex_sb wusir_sb 日天_sb')) 打印結果 ['alex', ' wusir', ' 日天'] print(re.findall('compan(y|ies)','Too many companies have gone bankrupt, and the next one is my company')) 打印結果: ['ies', 'y'] 分組() 中加入?: 表示將整體匹配出來而不只是()里面的內容 print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company')) 打印結果: ['companies', 'company']

混合使用

.* 貪婪匹配 從頭到尾(.代表任意字符,*匹配0個或多個左邊的字符,那就是有0個或多個. 那只要是a開頭,b結尾的字符串都符合要求)

print(re.findall('a.*b', 'ab aab a*()b')) 打印結果: ['ab aab a*()b']

.*? 此時的?不是對左邊的字符進行0次或者1次的匹配,而只是針對.*這種貪婪匹配的模式進行一種限定:告知他要遵從非貪婪匹配 推薦使用!

print(re.findall('a.*?b', 'ab a1b a*()b, aaaaaab')) 打印結果: ['ab', 'a1b', 'a*()b', 'aaaaaab']

常用方法

re.search 查找

只要找到第一個就返回,返回的是一個包含匹配信息的對象,該對象可以用group()方法顯示出來

import re s = re.search('alex','alex sb sb alex 日天') ##這是個對象 print(s.group()) 打印結果: alex

re.match 查找

查找的內容必須在開頭,否則就返回None

s = re.match('alex','alex sb alex sb sb alex 日天') print(s.group()) 打印結果: alex

re.split 分割

可以按照任意字符分割

print(re.split('[ ::,;;,]','alex wusir,日天,太白;女神;肖鋒:吳超')) 打印結果: ['alex', 'wusir', '日天', '太白', '女神', '肖鋒', '吳超']

re.sub替換

s = re.sub('小紅','小黃','小紅和小蘭,明天要跟小明一起去郊游,但是小紅不想去') print(s) 打印結果: 小黃和小蘭,明天要跟小明一起去郊游,但是小黃不想去

最后如果加上數字,代表替換的次數,如果次數超出字符串出現的次數,則返回所有

s = re.sub('小紅','小黃','小紅和小蘭,明天要跟小明一起去郊游,但是小紅不想去',1) print(s) 打印結果: 小黃和小蘭,明天要跟小明一起去郊游,但是小紅不想去

obj=re.compile('\d{2}')

obj = re.compile('\d{2}') print(obj.search('abc123eeee').group()) #12 print(obj.findall('abc123eeee')) #['12'],重用了obj 打印結果: 12 ['12']

re.finditer

返回一個存放結果的迭代器

ret = re.finditer('\d','123day788add') print(ret.__next__().group()) print([i.group() for i in ret]) 打印結果: 1 ['2', '3', '7', '8', '8']

命名分組
ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>")

?P是可以對組進行命名

ret = re.search("<(?P<tag_name1>\w+)>\w+</(?P=tag_name1)>","<h1>hello</h1>") print(ret.group('tag_name1')) print(ret.group()) 打印結果: h1 <h1>hello</h1>

?

轉載于:https://www.cnblogs.com/Ailsa-a/p/10397150.html

總結

以上是生活随笔為你收集整理的Python基础-re模块的全部內容,希望文章能夠幫你解決所遇到的問題。

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