正则总结(Python)
生活随笔
收集整理的這篇文章主要介紹了
正则总结(Python)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正則大家都不陌生,工作中一定會接觸到。最近在Python中用的了正則,所以順便整理一下。
一、re模塊的使用
#導入 re模塊 import re# 使用match方法進行匹配操作 result = re.match(正則表達式, 要匹配的字符串)# 如果上一步匹配到數據的話,可以使用group方法來提取數據 result.group()re.match 是用來進行正則匹配檢查的方法,如果字符串匹配正則表達式,則match方法返回匹配對象,否則返回None
二、表示字符等
| 字符 | 功能 |
| . | 匹配任意一個字符(除了\n) |
| [] | 匹配[]中列舉的字符 |
| \d | 匹配數字,也就是0-9 |
| \D | 匹配非數字 |
| \s | 匹配空白,即空格、tab鍵 |
| \S | 匹配非空白 |
| \w | 匹配單詞字符 即a-z、A-Z、0-9、_ |
| \W | 匹配非單詞字符 |
?
如果[]里以^開頭表示非的意思。
import reret = re.match(".", "M") print(ret.group())p = "1[345]" # 這個正則也就是匹配13、14、15 這三種情況 result1 = re.match(p, '12') #不匹配 print(result1) result2 = re.match(p, '13') # 匹配 print(result2)rP = "1[^345]" # [] 里面有個 ^ 表示取反的意思也就是不是這三個數的情況 result1 = re.match(rP, '12') #匹配 print(result1) result2 = re.match(rP, '13') #不匹配 print(result2)print("----------------------------------------------")result = re.match('\d', "13") # 數字 print(result)result = re.match("嫦娥\d號","嫦娥3號發射成功") print(result)三、原始字符
就是在正則里面有可能出現轉義的情況。在正則表達式里面使用“\”來表示轉義,比如你要匹配“\”,這個時候正則需要“\\”,有時候這個斜杠可能遺漏等問題。Python里的原生字符串很好地解決了這個問題,有了原始字符串,你再也不用擔心是不是漏寫了反斜杠,寫出來的表達式也更直觀。
import re #轉義 result = re.match('\\\\n\w', '\\nab') print(result)# 原始字符 s = r'\nabc' print(s)result = re.match(r'\\n\w', r'\nab') print(result)四、表示數量
| 字符 | 功能 |
| * | 匹配前一個字符0次或者無限次,即可有可無 |
| + | 匹配前一個字符1次或者無限次,即至少1次 |
| ? | 匹配前一個字符出現一次或者0次,即要么1次,要么沒有 |
| {m} | 匹配前一個字符出現m次 |
| {m,} | 匹配前一個字符至少出現m次 |
| {m,n} | 匹配前一個字符出現m到n次 |
五、表示邊界
| 字符 | 功能 |
| ^ | 匹配字符串開頭 |
| $ | 匹配字符串結尾 |
| \b | 匹配一個單詞的邊界 |
| \B | 匹配非單詞邊界 |
說到開頭和結尾想到vi編輯器里面鼠標移動到開頭的位置就是 ^, 光標移動到結尾的位置就是$
import re# ^ 開始 # $ 末尾 , 其實在 vi 編輯器里面光標去頭還是未也是這樣的 result = re.match(r'^\w+\bve\b', 'hover') print(result)result = re.match(r'^\w+\bve\b', 'ho ve r') print(result) # \b 不能匹配空格 result = re.match(r'^\w+\sve\b', 'ho ve r') print(result)result = re.match(r'^.+ve\b', 'ho ve r') print(result)六、匹配分組
| 字符 | 功能 |
| | | 匹配左右任意一個表達式 |
| (ab) | 將括號中字符作為一個分組 |
| \num | 引用分組num匹配到字符串 |
| (?P<name>) | 分組起別名 |
| (?P=name) | 引用別名為name分組匹配到字符串 |
比如現在要表示0-100之間的數字?
import re #正則表示 0 - 100 result = re.match(r"[1-9]\d?$|0|100", '0') print(result)result = re.match(r"[1-9]?\d?$|100", '0') print(result)假設現在要匹配“<html><h1>helo world</h1></html>” 這樣的字符?
import re #<html><h1>helo world</h1></html> # \1 \2 提取的位置 result = re.match(r"<(.+)><(.+)>.+</\2></\1>", '<html><h1>helo world</h1></html>') print(result) result = re.match(r"<(.+)><(.+)>.+</\2></\1>", '<html><h1>helo world</h1></h1>') # 匹配不成功 print(result)另外如果標號太麻煩的話,可以分組起名來寫。
import re # 分組起名 result = re.match(r"<(?P<Key1>.+)><(?P<Key2>.+)>.+</(?P=Key2)></(?P=Key1)>", '<html><h1>helo world</h1></html>') print(result)七、re的高級用法,search、findall、sub
import reresult = re.search(r"\d", 'asdf0') print(result)result = re.search(r"^\d$", 'asdf0') print(result)# search 只能找到一個 s = 'mar</h1>hellow od</h1>' result = re.search(r'\w+</h1>', s) print(result)# findall 可以找到所有的 s = 'mar</h1>hellow lod</h1>' result = re.findall(r'\w+</h1>', s) print(result)#sub 將匹配到的數據進行替換# ret = re.sub(r"要替換的正則", '要替換的值', "要修改的字符串")# 把 t 中的 php 都換成 python t = "c++ php python shell window php python" ret = re.sub(r"php", 'python', t) print(ret)print("---------------------------------------------------------------------------------") # 現在要有目的的去替換 def replace(result):r = int(result.group()) + 20# 在原有的值上面加 20 return str(r)ret = re.sub(r'\d+', replace, 'python = 100, php = 10') print(ret)八、Python貪婪和非貪婪
Python中的數量詞默認的貪婪模式,總是嘗試匹配盡可能多的字符;非貪婪則相反,總是嘗試匹配盡可能少的字符。在"*","?","+","{m,n}"后面加上?,使貪婪變成非貪婪。比如看下面這個例子。
import res = "This is a number 234-235-22-423" r = re.match(".+(\d+-\d+-\d+-\d+)",s) print(r.group(1))s = "This is a number 234-235-22-423" r = re.match("(.+)(\d+-\d+-\d+-\d+)",s) #前面的(.+) 是貪婪的,盡可能匹配多的 print(r.groups())#在"*","?","+","{m,n}"后面加上?,使貪婪變成非貪婪。 s = "This is a number 234-235-22-423" r = re.match("(.+?)(\d+-\d+-\d+-\d+)",s) #前面的(.+) 是貪婪的,盡可能匹配多的 print(r.groups())?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的正则总结(Python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个不知名的网站复制来的: java怎样
- 下一篇: 8家大厂SSP offer的清华学长谈算