python非貪婪、多行匹配正則表達式
一些regular的tips:
1 非貪婪flag
>>> re . findall ( r " a( \d +?) " , " a23b " )
[ ' 2 ' ]
>>> re . findall ( r " a( \d +) " , " a23b " )
[ ' 23 ' ]
[ ' 2 ' ]
>>> re . findall ( r " a( \d +) " , " a23b " )
[ ' 23 ' ]
注意比較這種情況:
>>> re . findall ( r " a( \d +)b " , " a23b " )
[ ' 23 ' ]
>>> re . findall ( r " a( \d +?)b " , " a23b " )
[ ' 23 ' ]
[ ' 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 \n a34b " )
[]
>>> re . findall ( r " a( \d +)b.+a( \d +)b " , " a23b \n a34b " , re . S )
[( ' 23 ' , ' 34 ' )]
>>>
[]
>>> re . findall ( r " a( \d +)b.+a( \d +)b " , " a23b \n a34b " , re . S )
[( ' 23 ' , ' 34 ' )]
>>>
re.M:^$標志將會匹配每一行,默認^和$只會匹配第一行
>>> re . findall ( r " ^a( \d +)b " , " a23b \n a34b " )
[ ' 23 ' ]
>>> re . findall ( r " ^a( \d +)b " , " a23b \n a34b " , re . M )
[ ' 23 ' , ' 34 ' ]
[ ' 23 ' ]
>>> re . findall ( r " ^a( \d +)b " , " a23b \n a34b " , re . M )
[ ' 23 ' , ' 34 ' ]
但是,如果沒有^標志,
>>> re . findall ( r " a( \d +)b " , " a23b \n a23b " )
[ ' 23 ' , ' 23 ' ]
[ ' 23 ' , ' 23 ' ]
可見,是無需re.M
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!