一些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...