簡(jiǎn)單的正則表達(dá)式

  • 特殊字符
  • ^ $ * ? + {2} {2,} {2,5} |
  • [] [^] [a-z] .
  • \s \S \w \W
  • [\u4E00-\u9FA5] () \d
  • 常用的6個(gè)re中的函數(shù)
    re.compile(pattern,flag)#根據(jù)正則匹配字符串以及附加條件,返回一個(gè)pattern對(duì)象
    re.search(pattern,string)#搜索整個(gè)字符串,直到發(fā)現(xiàn)符合正則表達(dá)式的字符串
    re.match(pattern,string)#從頭開始檢測(cè)字符串是否符合正則表達(dá)式,必須從字符串的第一個(gè)字符開始
    re.sub(pattern,replacement,string)#將字符串中根據(jù)正則匹配到的字符串用replacement替換
    re.split(pattern,string)#根據(jù)正則表達(dá)式分割字符串,將分割后的字符串放到list中返回
    re.findall(pattern,string)#根據(jù)正則表達(dá)式分割字符串,將找到的所有結(jié)果放到list中返回

  • re.match()一些簡(jiǎn)單的Python示例

import re
line = 'bobby123'
regex_str = "^b.*"#以b開頭的任意字符
if re.match(regex_str,line):
    print('yes')
import re
line = 'bobby123'
regex_str = "^b.*3$"#以b開頭以3結(jié)尾的任意字符
if re.match(regex_str,line):
    print('yes')
import re
line = 'boooooooobby123'
#regex_str = ".*(b.*b).*"# bb  ()為提取字串即提取括號(hào)內(nèi)的內(nèi)容,其實(shí)為反向匹配,貪婪模式
regex_str = ".*?(b.*b).*"#boooooooobb 左面非貪婪模式,從左面開始匹配,后面為貪婪模式
regex_str = ".*?(b.*?b).*"#boooooooob
match_obj = re.match(regex_str,line)
print(match_obj)
if match_obj:
    print(match_obj.group(1))#
import re
line = 'booobaaooooobbbaby123'
regex_str = ".*(b.+b).*"# +出現(xiàn)最少一次 bab 貪婪模式一直匹配到最后
match_obj = re.match(regex_str,line)
print(match_obj)
if match_obj:
    print(match_obj.group(1))#
import re
line = 'booobaaooooobbbaaaaaaaaby123'
regex_str = ".*(b.{2,5}b).*"# {}前面字符出現(xiàn)的次數(shù),在這里為任意字符出現(xiàn)最少2次最多5次
match_obj = re.match(regex_str,line)
print(match_obj)
if match_obj:
    print(match_obj.group(1))#
import re
line = 'boobby123'
regex_str = '((bobby|boobby)123)'
match_obj = re.match(regex_str,line)
print(match_obj)
if match_obj:
    print(match_obj.group(1))#boobby123
import re
line = 'boobby123'
regex_str = '([abcd]oobby123)'#[]為里面內(nèi)容的任何一個(gè)
match_obj = re.match(regex_str,line)
print(match_obj)
if match_obj:
    print(match_obj.group(1))#boobby123
import re
line = '14782902222'
#regex_str = '(1[48357][0-9]{9})'#[0-9]0-9的任意數(shù)字出現(xiàn)9次  14782902222
regex_str = '(1[48357][^1]{9})'#不等于1出現(xiàn)9次
# 區(qū)間  任選  [.*]內(nèi)的字符不在代表特殊含義
match_obj = re.match(regex_str,line)
print(match_obj)
if match_obj:
    print(match_obj.group(1))#14782902222
import re
line = '你ss好'
regex_str = '(你\S+好)'#匹配任意非空字符
match_obj = re.match(regex_str,line)
print(match_obj)
if match_obj:
    print(match_obj.group(1))#14782902222
import re
line = 'study in 南京大學(xué)'
regex_str = '.*?([\u4E00-\u9FA5]+大學(xué))'#提取漢字,不加問(wèn)號(hào)為京大學(xué)
match_obj = re.match(regex_str,line)
print(match_obj)
if match_obj:
    print(match_obj.group(1))#南京大學(xué)
import re
line = 'XXX出生于2001年9月9日'
#line = 'XXX出生于2001/9/9'
#line = 'XXX出生于2001-9-9'
#line = 'XXX出生于2001-09-09'
#line = 'XXX出生于2001-09'
regex_str = '.*出生于(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}|[月/-]$|$))'#
match_obj = re.match(regex_str,line)
print(match_obj)
if match_obj:
    print(match_obj.group(1))#
  • re.compile()簡(jiǎn)要說(shuō)明
##查找以id為plist并以<div class="page clearfix">結(jié)尾的代碼
#.*?是一個(gè)固定搭配,.和*可以匹配任意多個(gè)字符,加上?就是最小匹配,
#也就是我們上面說(shuō)的非貪婪模式,直白的說(shuō)就是匹配盡可能短的字符串
#flags定義包括:
#re.I:忽略大小寫
#re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境
#re.M:多行模式
#re.S:' . '并且包括換行符在內(nèi)的任意字符(注意:' . '不包括換行符)
#re.U: 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫(kù)
pattern1 = '<div id="plist".*?<div class="page clearfix">'
str1 = re.compile(pattern1,re.S).findall(html)#
  • 正則表達(dá)式模式
    模式字符串使用特殊的語(yǔ)法來(lái)表示一個(gè)正則表達(dá)式:
    字母和數(shù)字表示他們自身。一個(gè)正則表達(dá)式模式中的字母和數(shù)字匹配同樣的字符串。
    多數(shù)字母和數(shù)字前加一個(gè)反斜杠時(shí)會(huì)擁有不同的含義。
    標(biāo)點(diǎn)符號(hào)只有被轉(zhuǎn)義時(shí)才匹配自身,否則它們表示特殊的含義。
    反斜杠本身需要使用反斜杠轉(zhuǎn)義。
    由于正則表達(dá)式通常都包含反斜杠,所以你最好使用原始字符串來(lái)表示它們。模式元素(如 r'\t',等價(jià)于 '\t')匹配相應(yīng)的特殊字符。
    下表列出了正則表達(dá)式模式語(yǔ)法中的特殊元素。如果你使用模式的同時(shí)提供了可選的標(biāo)志參數(shù),某些模式元素的含義會(huì)改變。
模式 描述
^ 匹配字符串的開頭
$ 匹配字符串的末尾
* 前面的字符可以重復(fù)任意多次
. 匹配任意字符,除了換行符,當(dāng)re.DOTALL標(biāo)記被指定時(shí),則可以匹配包括換行符的任意字符
[...] 用來(lái)表示一組字符,單獨(dú)列出:[amk] 匹配 'a','m'或'k'
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
re* 匹配0個(gè)或多個(gè)的表達(dá)式
re+ 匹配1個(gè)或多個(gè)的表達(dá)式
re? 匹配0個(gè)或1個(gè)由前面的正則表達(dá)式定義的片段,非貪婪方式
re{ n} 前面字符出現(xiàn)的次數(shù)
re{ n,} 精確匹配n個(gè)前面表達(dá)式
re{ n, m} 匹配 n 到 m 次由前面的正則表達(dá)式定義的片段,貪婪方式
a b 匹配a或b
(re) G匹配括號(hào)內(nèi)的表達(dá)式,也表示一個(gè)組
(?imx) 正則表達(dá)式包含三種可選標(biāo)志:i, m, 或 x 。只影響括號(hào)中的區(qū)域
(?-imx) 正則表達(dá)式關(guān)閉 i, m, 或 x 可選標(biāo)志。只影響括號(hào)中的區(qū)域
(?: re) 類似 (...), 但是不表示一個(gè)組
(?imx: re) 在括號(hào)中使用i, m, 或 x 可選標(biāo)志
(?-imx: re) 在括號(hào)中不使用i, m, 或 x 可選標(biāo)志
(?#...) 注釋.
(?= re) 前向肯定界定符。如果所含正則表達(dá)式,以 ... 表示,在當(dāng)前位置成功匹配時(shí)成功,否則失敗。但一旦所含表達(dá)式已經(jīng)嘗試,匹配引擎根本沒(méi)有提高;模式的剩余部分還要嘗試界定符的右邊
(?! re) 前向否定界定符。與肯定界定符相反;當(dāng)所含表達(dá)式不能在字符串當(dāng)前位置匹配時(shí)成功
(?> re) 匹配的獨(dú)立模式,省去回溯
\w 匹配字母數(shù)字及下劃線
\W 匹配非字母數(shù)字及下劃線
\s 匹配任意空白字符,等價(jià)于 [\t\n\r\f]
\S 匹配任意非空字符
\d 匹配任意數(shù)字,等價(jià)于 [0-9]
\D 匹配任意非數(shù)字
\A 匹配字符串開始
\Z 匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串
\z 匹配字符串結(jié)束
\G 匹配最后匹配完成的位置
\b 匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'
\B 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'
\n, \t, 等. 匹配一個(gè)換行符。匹配一個(gè)制表符
\1...\9 匹配第n個(gè)分組的內(nèi)容
\10 匹配第n個(gè)分組的內(nèi)容,如果它經(jīng)匹配。否則指的是八進(jìn)制字符碼的表達(dá)式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容