re模塊自己是用來操做正則表達式,與正則自己沒有關係python
正則表達式是用來匹配處理字符串的 python 中使用正則表達式須要引入re模塊正則表達式
如:函數
import re #第一步,要引入re模塊工具
re.match(pattern表達式規則, string)測試
import re print(re.match('www', 'www.runoob.com')) # 在起始位置匹配 print(re.match('com', 'www.runoob.com')) # 不在起始位置不匹配
re.search("匹配規則", "要匹配的字符串")code
import re ret = re.serch('\d','alex83') print(ret) if ret: print(ret.group()) #若是返回對象,用group取值
re.findall("匹配規則", "要匹配的字符串")對象
re.finditer內存
import re ret = re.finditer('\d','asfjsdf12jidfiewjfi'*200000) #ret是一個迭代器 for i in ret: #迭代出來的每一項都是一個對象 print(i.group()) #經過group取值便可
re.compile 編譯方法rem
import re s= 'asfjsdf12jidfiewjfi' ret = re.compile('\d+') r1 = ret.seach('alex83') r2 = ret.findall('wusir73')
擴展字符串
import re # ret = re.search("<(?P<tag_name>\w+)>\w+</w+>","<h1>hello</h1>") # print(ret.group('tag_name')) # print(ret.group()) ret = re.search("<(?P<tag_name1>\w+)>\w+</\w+>","<h1>hello</h1>") #還能夠在分組中利用?的形式給分組起名字 #獲取的匹配結果能夠直接用group('名字') 拿到對應的值 print(ret.group('tag_name1')) #結果 :h1 print(ret.group()) #結果 :<h1>hello</h1>
findall 遇到分組時,優先顯示分組中的內容
?: 取消分組優先展現
import re s1 = '1-2*(60+(-40.35/5)-(-4*3))' res=re.compile(r'\d+\.\d+?|(?:\d+)') ret=re.findall(res,s1) # ret.remove('') print(ret)
分組編號
s1 = '<h1>wahaha</h1>' s2 = '<a>wahaha ya wahaha</a>' import re ret = re.search('<(\w+)>(.*?)</\w+>',s1) print(ret) print(ret.group(0)) # group參數默認爲0表示取整個正則匹配的結果 print(ret.group(1)) # 取第一個分組中的內容 print(ret.group(2)) # 取第二個分組中的內容
分組命名
(?P <名字> 正則表達式)
s1 = '<h1>wahaha</h1>' s2 = '<a>wahaha ya wahaha</a>' ret = re.search('<(?P<tag>\w+)>.*?</(?P<tag2>\w+)>',s1) #(?P<tag>) print(ret.group('tag'))
引用分組
s1 = '<h1>wahaha</h1>' s2 = '<a>wahaha ya wahaha</a>' ret = re.search('<(?P<tag>\w+)>.*?</(?P=tag)>',s1) #(?P=tag) print(ret.group('tag'))
#經典例題 #有的時候咱們想匹配的內容包含在不相匹配的內容當中,這個時候只須要把不想匹配的先匹配出來,再經過手段去掉 import re ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))") print(ret) ret.remove('') print(ret)
編譯標誌位,用於修改正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。經常使用的flags有:
標誌 | 含義 |
---|---|
re.S(DOTALL) | 使.匹配包括換行在內的全部字符 |
re.I(IGNORECASE) | 使匹配對大小寫不敏感 |
re.L(LOCALE) | 作本地化識別(locale-aware)匹配,法語等![]() |
re.M(MULTILINE) | 多行匹配,影響^和$ |
re.X(VERBOSE) | 該標誌經過給予更靈活的格式以便將正則表達式寫得更易於理解 |
re.U | 根據Unicode字符集解析字符,這個標誌影響\w,\W,\b,\B |
#示例 re.compile(pattern,flags=0) pattern: 編譯時用的表達式字符串。 flags 編譯標誌位,用於修改正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。
\\n
匹配\n
===>r'\n'
\\\\n
匹配\\n
===>r'\\n'