日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

正则总结(Python)

發(fā)布時間:2025/3/12 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正则总结(Python) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

正則大家都不陌生,工作中一定會接觸到。最近在Python中用的了正則,所以順便整理一下。

一、re模塊的使用

#導(dǎo)入 re模塊 import re# 使用match方法進行匹配操作 result = re.match(正則表達式, 要匹配的字符串)# 如果上一步匹配到數(shù)據(jù)的話,可以使用group方法來提取數(shù)據(jù) result.group()

re.match 是用來進行正則匹配檢查的方法,如果字符串匹配正則表達式,則match方法返回匹配對象,否則返回None

二、表示字符等

字符功能
.匹配任意一個字符(除了\n)
[]匹配[]中列舉的字符
\d匹配數(shù)字,也就是0-9
\D匹配非數(shù)字
\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]" # [] 里面有個 ^ 表示取反的意思也就是不是這三個數(shù)的情況 result1 = re.match(rP, '12') #匹配 print(result1) result2 = re.match(rP, '13') #不匹配 print(result2)print("----------------------------------------------")result = re.match('\d', "13") # 數(shù)字 print(result)result = re.match("嫦娥\d號","嫦娥3號發(fā)射成功") print(result)

三、原始字符

就是在正則里面有可能出現(xiàn)轉(zhuǎn)義的情況。在正則表達式里面使用“\”來表示轉(zhuǎn)義,比如你要匹配“\”,這個時候正則需要“\\”,有時候這個斜杠可能遺漏等問題。Python里的原生字符串很好地解決了這個問題,有了原始字符串,你再也不用擔(dān)心是不是漏寫了反斜杠,寫出來的表達式也更直觀。

import re #轉(zhuǎn)義 result = re.match('\\\\n\w', '\\nab') print(result)# 原始字符 s = r'\nabc' print(s)result = re.match(r'\\n\w', r'\nab') print(result)

四、表示數(shù)量

字符功能
*匹配前一個字符0次或者無限次,即可有可無
+匹配前一個字符1次或者無限次,即至少1次
?匹配前一個字符出現(xiàn)一次或者0次,即要么1次,要么沒有
{m}匹配前一個字符出現(xiàn)m次
{m,}匹配前一個字符至少出現(xiàn)m次
{m,n}匹配前一個字符出現(xiàn)m到n次

五、表示邊界

字符功能
^匹配字符串開頭
$匹配字符串結(jié)尾
\b匹配一個單詞的邊界
\B匹配非單詞邊界

說到開頭和結(jié)尾想到vi編輯器里面鼠標(biāo)移動到開頭的位置就是 ^, 光標(biāo)移動到結(jié)尾的位置就是$

import re# ^ 開始 # $ 末尾 , 其實在 vi 編輯器里面光標(biāo)去頭還是未也是這樣的 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分組匹配到字符串

比如現(xiàn)在要表示0-100之間的數(shù)字?

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)

假設(shè)現(xiàn)在要匹配“<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)

另外如果標(biāo)號太麻煩的話,可以分組起名來寫。

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 將匹配到的數(shù)據(jù)進行替換# 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("---------------------------------------------------------------------------------") # 現(xiàn)在要有目的的去替換 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中的數(shù)量詞默認(rèn)的貪婪模式,總是嘗試匹配盡可能多的字符;非貪婪則相反,總是嘗試匹配盡可能少的字符。在"*","?","+","{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())

?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的正则总结(Python)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。