python正則表達(dá)式淺析

簡(jiǎn)單記錄下python下正則表達(dá)式的用法龄恋,加深對(duì)正則表達(dá)式用法的記憶,方便以后爬蟲

本文選取了莫煩python中我覺得常用的正則表達(dá)式的用例凶伙,如有希望更加全面了解python正則表達(dá)式的用法郭毕,可以點(diǎn)擊鏈接

python下簡(jiǎn)單的匹配

var1 = "i"
var2 = "she"
str = "i miss you"
print(var1 in str)
print(var2 in str)

運(yùn)行結(jié)果

True
False

Regex下簡(jiǎn)單匹配

import re
var1 = "i"
var2 = "she"
str = "i miss you"
print(re.search(var1, str))
print(re.search(var2, str))

運(yùn)行結(jié)果

<re.Match object; span=(0, 1), match='i'>
None

靈活匹配

需要找到潛在的可能性文件,可以通過[]將可能的字符囊括進(jìn)來函荣,通過r"expression"來表明這是一個(gè)正則表達(dá)式

"""例1"""
"""[au]表示a和u中可選取一個(gè)來進(jìn)行匹配"""
import re
print(re.search(r"r[au]n", "dog runs to cat"))

運(yùn)行結(jié)果

<re.Match object; span=(4, 7), match='run'>
"""例2"""
"""[a-z]表示所有小寫字母"""
"""[a-z0-9]表示所有數(shù)字和小寫字母"""
import re
print(re.search(r"r[a-z]n", "dog runs to cat"))
print(re.search(r"r[a-z0-9]n", "dog runs to cat")

運(yùn)行結(jié)果

<re.Match object; span=(4, 7), match='run'>
<re.Match object; span=(4, 7), match='run'>

轉(zhuǎn)義字符

  • \d : 任何數(shù)字
  • \D : 非數(shù)字
  • \s : 任何 white space, 如 [\t\n\r\f\v]
  • \S : 不是 white space
  • \w : 任何大小寫字母, 數(shù)字和 “” [a-zA-Z0-9]
  • \W : 不是 \w
  • \b : 空白字符 (只在某個(gè)字的開頭或結(jié)尾)
  • \B : 空白字符 (不在某個(gè)字的開頭或結(jié)尾)
  • \ : 匹配 \
  • . : 匹配任何字符 (除了 \n)
  • ^ : 匹配開頭
  • $ : 匹配結(jié)尾
  • ? : 前面的字符可有可無
# \d : decimal digit
print(re.search(r"r\dn", "run r4n"))           # <_sre.SRE_Match object; span=(4, 7), match='r4n'>
# \D : any non-decimal digit
print(re.search(r"r\Dn", "run r4n"))           # <_sre.SRE_Match object; span=(0, 3), match='run'>
# \s : any white space [\t\n\r\f\v]
print(re.search(r"r\sn", "r\nn r4n"))          # <_sre.SRE_Match object; span=(0, 3), match='r\nn'>
# \S : opposite to \s, any non-white space
print(re.search(r"r\Sn", "r\nn r4n"))          # <_sre.SRE_Match object; span=(4, 7), match='r4n'>
# \w : [a-zA-Z0-9_]
print(re.search(r"r\wn", "r\nn r4n"))          # <_sre.SRE_Match object; span=(4, 7), match='r4n'>
# \W : opposite to \w
print(re.search(r"r\Wn", "r\nn r4n"))          # <_sre.SRE_Match object; span=(0, 3), match='r\nn'>
# \b : empty string (only at the start or end of the word)
print(re.search(r"\bruns\b", "dog runs to cat"))    # <_sre.SRE_Match object; span=(4, 8), match='runs'>
# \B : empty string (but not at the start or end of a word)
print(re.search(r"\B runs \B", "dog   runs  to cat"))  # <_sre.SRE_Match object; span=(8, 14), match=' runs '>
# \\ : match \
print(re.search(r"runs\\", "runs\ to me"))     # <_sre.SRE_Match object; span=(0, 5), match='runs\\'>
# . : match anything (except \n)
print(re.search(r"r.n", "r[ns to me"))         # <_sre.SRE_Match object; span=(0, 3), match='r[n'>
# ^ : match line beginning
print(re.search(r"^dog", "dog runs to cat"))   # <_sre.SRE_Match object; span=(0, 3), match='dog'>
# $ : match line ending
print(re.search(r"cat$", "dog runs to cat"))   # <_sre.SRE_Match object; span=(12, 15), match='cat'>
# ? : may or may not occur
print(re.search(r"Mon(day)?", "Monday"))       # <_sre.SRE_Match object; span=(0, 6), match='Monday'>
print(re.search(r"Mon(day)?", "Mon"))          # <_sre.SRE_Match object; span=(0, 3), match='Mon'>

重復(fù)匹配

  • *:重復(fù)零次或多次
  • +:重復(fù)一次或多次
  • {n,m}:重復(fù)n次至m次
  • {n}:重復(fù)n次
# * : occur 0 or more times
print(re.search(r"ab*", "a"))             # <_sre.SRE_Match object; span=(0, 1), match='a'>
print(re.search(r"ab*", "abbbbb"))        # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'>

# + : occur 1 or more times
print(re.search(r"ab+", "a"))             # None
print(re.search(r"ab+", "abbbbb"))        # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'>

# {n, m} : occur n to m times
print(re.search(r"ab{2,10}", "a"))        # None
print(re.search(r"ab{2,10}", "abbbbb"))   # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'>

后面的內(nèi)容其實(shí)是對(duì)前面內(nèi)容的組合復(fù)用

分組

match = re.search(r"(\d+), Date: (.+)", "ID: 021523, Date: Feb/12/2017")
print(match.group())                   # 021523, Date: Feb/12/2017
print(match.group(1))                  # 021523
print(match.group(2))                  # Date: Feb/12/2017

組會(huì)多的時(shí)候显押,有可能難以找到自己想要的組,這時(shí)候可以利用類似字典的原理傻挂,用名字構(gòu)建索引

match = re.search(r"(?P<id>\d+), Date: (?P<date>.+)", "ID: 021523, Date: Feb/12/2017")
print(match.group('id'))                # 021523
print(match.group('date'))              # Date: Feb/12/2017

另外歡迎大家來參觀我超漂亮的個(gè)人博客:https://raysuner.top

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末乘碑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子金拒,更是在濱河造成了極大的恐慌兽肤,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绪抛,死亡現(xiàn)場(chǎng)離奇詭異资铡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)睦疫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門害驹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛤育,你說我怎么就攤上這事宛官。” “怎么了瓦糕?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵底洗,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我咕娄,道長(zhǎng)亥揖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任圣勒,我火速辦了婚禮费变,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘圣贸。我一直安慰自己挚歧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布吁峻。 她就那樣靜靜地躺著滑负,像睡著了一般在张。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上矮慕,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天帮匾,我揣著相機(jī)與錄音,去河邊找鬼痴鳄。 笑死瘟斜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夏跷。 我是一名探鬼主播哼转,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼槽华!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起趟妥,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤猫态,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后披摄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亲雪,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年疚膊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了义辕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寓盗,死狀恐怖灌砖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情傀蚌,我是刑警寧澤基显,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站善炫,受9級(jí)特大地震影響撩幽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜箩艺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一窜醉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧艺谆,春花似錦榨惰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽聊记。三九已至,卻和暖如春恢暖,著一層夾襖步出監(jiān)牢的瞬間排监,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工杰捂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舆床,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓嫁佳,卻偏偏與公主長(zhǎng)得像挨队,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒿往,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • Python中的正則表達(dá)式(re) import rere.match #從開始位置開始匹配盛垦,如果開頭沒有則無re...
    BigJeffWang閱讀 7,081評(píng)論 0 99
  • 幾個(gè)正則表達(dá)式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    沒技術(shù)的BUG開發(fā)攻城獅閱讀 4,587評(píng)論 0 23
  • 搞懂Python 正則表達(dá)式用法 Python 正則表達(dá)式 正則表達(dá)式是一個(gè)特殊的字符序列,它能幫助你方便的檢查一...
    廈熱閱讀 1,582評(píng)論 0 2
  • 那些文章寫的好的都把文字變成人民幣了瓤漏,要是能把文字變成金幣腾夯,那真是芝麻開門的金庫了。 念一下咒語蔬充,把自己變成富婆蝶俱,多好呀
    媚珠春華閱讀 124評(píng)論 0 0
  • 4月3日,Sunny陽陽滿月了饥漫。好幾個(gè)朋友問我榨呆,做了一個(gè)月的母親了,什么感受什么體會(huì)庸队? 我發(fā)現(xiàn)积蜻,以前聽到的情歌都適...
    yuweido閱讀 277評(píng)論 2 1