(學習)python非貪婪 多行匹配正規表示式例子

2021-06-17 23:52:24 字數 2393 閱讀 2281

一些regular的tips:

1非貪婪flag

>>> re.

findall(r

"a(\d+?)",

"a23b")

# 非貪婪模式['

2']>>> re.

findall(r

"a(\d+)",

"a23b")

['23'

] 注意比較這種情況:

>>> re.

findall(r

"a(\d+)b",

"a23b")

['23'

]>>> re.

findall(r

"a(\d+?)b",

"a23b")

#如果前後均有限定條件,則非匹配模式失效['

23']

2如果你要多行匹配,那麼加上re.s和re.m標誌

re.s:.將會匹配換行符,預設.逗號不會匹配換行符

>>> re.

findall(r

"a(\d+)b.+a(

\d+)b",

"a23b

\na34b")

>>> re.

findall(r

"a(\d+)b.+a(

\d+)b",

"a23b

\na34b",

re.s)

[('23'

,'34'

)]>>>

re.m:^$標誌將會匹配每一行,預設^只會匹配符合正則的第一行;預設$只會匹配符合正則的末行

>>> re.

findall(r

"^a(

\d+)b",

"a23b

\na34b")

['23'

]>>> re.

findall(r

"^a(

\d+)b",

"a23b

\na34b",

re.m)

['23'

,'34'

] 但是,如果沒有^標誌,

>>> re.

findall(r

"a(\d+)b",

"a23b

\na34b")

['23'

,'43'

] 可見,是無需re.m

import re

n='''12 drummers drumming,

11 pipers piping, 10 lords a-leaping'''

p=re.compile('^\d+')

p_multi=re.compile('^\d+',re.multiline) #設定 multiline 標誌

print re.findall(p,n)  #['12']

print re.findall(p_multi,n) # ['12', '11']

*************************===

import re

a = 'a23b'

print re.findall('a(\d+?)',a)  #['2']

print re.findall('a(\d+)',a) #['23']

print re.findall(r'a(\d+)b',a) #['23']

print re.findall(r'a(\d+?)b',a) # ['23']

*************************===

b='a23b\na34b'

''' . 匹配非換行符的任意乙個字元'''

print re.findall(r'a(\d+)b.+a(\d+)b',b) #

print re.findall(r'a(\d+)b',b,re.m) # ['23', '34']

print re.findall(r'^a(\d+)b',b,re.m) # ['23', '34']

print re.findall(r'a(\d+)b',b) #['23','34'] 可以匹配多行

print re.findall(r'^a(\d+)b',b) # ['23'] 預設^只會匹配符合正則的第一行

print re.findall(r'a(\d+)b$',b) # ['34'] 預設$只會匹配符合正則的末行

print re.findall(r'a(\d+)b',b,re.m) #['23', '34']

print re.findall(r'a(\d+)b.?',b,re.m)  # ['23', '34']

print re.findall(r"a(\d+)b", "a23b\na34b")  # ['23', '34']

*************************===

貪婪匹配和非貪婪匹配

貪婪模式 在整個表示式匹配成功的前提下,盡可能多的匹配 非貪婪模式 在整個表示式匹配成功的前提下,盡可能少的匹配 重複匹配0次或1次 重複匹配0次或更多次 重複匹配1次或更多次 預設情況下是貪婪的!content abbbbc pattern re.compile r ab result patte...

python非貪婪匹配 python正則非貪婪模式

那如果只想匹配1次怎麼辦呢,這就是正則中非貪婪模式的概念了 原理就是利用?與其他匹配次數規則進行組合 單個匹配規則 表示匹配0 n次 表示匹配1 n次 表示匹配0 1次 三者可組合成非貪婪模式匹配次數解析 簡而言之 它們必須結合左右的子串進行匹配,左邊正則必須非空,右邊正則可以為空,中心思想就是在匹...

shell 中 貪婪匹配 和 非貪婪匹配

舉個栗子 1 2 v jfedu.shiyiwen.com echo 乙個 為非貪婪匹配,即匹配最短結果。從右到左進行非貪婪匹配,匹配什麼呢?匹配已 的字元。那麼當然是匹配到了.com 然後執行刪除匹配到的字元。結果就是 這裡的 相當於定界符。而 是萬用字元 jfedu.shiyiwen 1 ech...