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

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

  • re.match()一些簡單的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  ()為提取字串即提取括號內(nèi)的內(nèi)容蛹磺,其實為反向匹配,貪婪模式
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)容的任何一個
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é))'#提取漢字,不加問號為京大學(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()簡要說明
##查找以id為plist并以<div class="page clearfix">結(jié)尾的代碼
#.*?是一個固定搭配猾普,.和*可以匹配任意多個字符,加上?就是最小匹配本谜,
#也就是我們上面說的非貪婪模式初家,直白的說就是匹配盡可能短的字符串
#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ù)庫
pattern1 = '<div id="plist".*?<div class="page clearfix">'
str1 = re.compile(pattern1,re.S).findall(html)#
  • 正則表達(dá)式模式
    模式字符串使用特殊的語法來表示一個正則表達(dá)式:
    字母和數(shù)字表示他們自身。一個正則表達(dá)式模式中的字母和數(shù)字匹配同樣的字符串乌助。
    多數(shù)字母和數(shù)字前加一個反斜杠時會擁有不同的含義溜在。
    標(biāo)點符號只有被轉(zhuǎn)義時才匹配自身,否則它們表示特殊的含義他托。
    反斜杠本身需要使用反斜杠轉(zhuǎn)義掖肋。
    由于正則表達(dá)式通常都包含反斜杠,所以你最好使用原始字符串來表示它們赏参。模式元素(如 r'\t'志笼,等價于 '\t')匹配相應(yīng)的特殊字符。
    下表列出了正則表達(dá)式模式語法中的特殊元素把篓。如果你使用模式的同時提供了可選的標(biāo)志參數(shù)纫溃,某些模式元素的含義會改變。
模式 描述
^ 匹配字符串的開頭
$ 匹配字符串的末尾
* 前面的字符可以重復(fù)任意多次
. 匹配任意字符韧掩,除了換行符紊浩,當(dāng)re.DOTALL標(biāo)記被指定時,則可以匹配包括換行符的任意字符
[...] 用來表示一組字符,單獨列出:[amk] 匹配 'a','m'或'k'
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
re* 匹配0個或多個的表達(dá)式
re+ 匹配1個或多個的表達(dá)式
re? 匹配0個或1個由前面的正則表達(dá)式定義的片段坊谁,非貪婪方式
re{ n} 前面字符出現(xiàn)的次數(shù)
re{ n,} 精確匹配n個前面表達(dá)式
re{ n, m} 匹配 n 到 m 次由前面的正則表達(dá)式定義的片段费彼,貪婪方式
a b 匹配a或b
(re) G匹配括號內(nèi)的表達(dá)式,也表示一個組
(?imx) 正則表達(dá)式包含三種可選標(biāo)志:i, m, 或 x 口芍。只影響括號中的區(qū)域
(?-imx) 正則表達(dá)式關(guān)閉 i, m, 或 x 可選標(biāo)志箍铲。只影響括號中的區(qū)域
(?: re) 類似 (...), 但是不表示一個組
(?imx: re) 在括號中使用i, m, 或 x 可選標(biāo)志
(?-imx: re) 在括號中不使用i, m, 或 x 可選標(biāo)志
(?#...) 注釋.
(?= re) 前向肯定界定符。如果所含正則表達(dá)式鬓椭,以 ... 表示虹钮,在當(dāng)前位置成功匹配時成功,否則失敗膘融。但一旦所含表達(dá)式已經(jīng)嘗試,匹配引擎根本沒有提高祭玉;模式的剩余部分還要嘗試界定符的右邊
(?! re) 前向否定界定符氧映。與肯定界定符相反;當(dāng)所含表達(dá)式不能在字符串當(dāng)前位置匹配時成功
(?> re) 匹配的獨立模式脱货,省去回溯
\w 匹配字母數(shù)字及下劃線
\W 匹配非字母數(shù)字及下劃線
\s 匹配任意空白字符岛都,等價于 [\t\n\r\f]
\S 匹配任意非空字符
\d 匹配任意數(shù)字,等價于 [0-9]
\D 匹配任意非數(shù)字
\A 匹配字符串開始
\Z 匹配字符串結(jié)束振峻,如果是存在換行臼疫,只匹配到換行前的結(jié)束字符串
\z 匹配字符串結(jié)束
\G 匹配最后匹配完成的位置
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置扣孟。例如烫堤, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'
\B 匹配非單詞邊界凤价。'er\B' 能匹配 "verb" 中的 'er'鸽斟,但不能匹配 "never" 中的 'er'
\n, \t, 等. 匹配一個換行符。匹配一個制表符
\1...\9 匹配第n個分組的內(nèi)容
\10 匹配第n個分組的內(nèi)容利诺,如果它經(jīng)匹配富蓄。否則指的是八進(jìn)制字符碼的表達(dá)式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市慢逾,隨后出現(xiàn)的幾起案子立倍,更是在濱河造成了極大的恐慌,老刑警劉巖侣滩,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件口注,死亡現(xiàn)場離奇詭異,居然都是意外死亡胜卤,警方通過查閱死者的電腦和手機(jī)疆导,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人澈段,你說我怎么就攤上這事悠菜。” “怎么了败富?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵悔醋,是天一觀的道長。 經(jīng)常有香客問我兽叮,道長芬骄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任鹦聪,我火速辦了婚禮账阻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泽本。我一直安慰自己淘太,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布规丽。 她就那樣靜靜地躺著蒲牧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赌莺。 梳的紋絲不亂的頭發(fā)上冰抢,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音艘狭,去河邊找鬼挎扰。 笑死,一個胖子當(dāng)著我的面吹牛巢音,可吹牛的內(nèi)容都是我干的鼓鲁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼港谊,長吁一口氣:“原來是場噩夢啊……” “哼骇吭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起歧寺,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤燥狰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后斜筐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體龙致,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年顷链,在試婚紗的時候發(fā)現(xiàn)自己被綠了目代。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖榛了,靈堂內(nèi)的尸體忽然破棺而出在讶,到底是詐尸還是另有隱情,我是刑警寧澤霜大,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布构哺,位于F島的核電站,受9級特大地震影響战坤,放射性物質(zhì)發(fā)生泄漏曙强。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一途茫、第九天 我趴在偏房一處隱蔽的房頂上張望碟嘴。 院中可真熱鬧,春花似錦囊卜、人聲如沸臀防。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捎废,卻和暖如春笑窜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背登疗。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工排截, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辐益。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓断傲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親智政。 傳聞我的和親對象是個殘疾皇子认罩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容