前言
本文主要給大家介紹了關于python使用正則表達式的非貪婪模式的相關內容,分享出來供大家參考學習,下面話不多說了,來一起詳細的介紹吧。
在正則表達式里,什么是正則表達式的貪婪與非貪婪匹配
如:String str="abcaxc";
Patter p="ab*c";
貪婪匹配:正則表達式一般趨向于最大長度匹配,也就是所謂的貪婪匹配。如上面使用模式p匹配字符串str,結果就是匹配到:abcaxc(ab*c)。
非貪婪匹配:就是匹配到結果就好,就少的匹配字符。如上面使用模式p匹配字符串str,結果就是匹配到:abc(ab*c)。
解決這個問題,可以采用:
正則引擎默認是貪婪的,當出現"*"時,它會盡量去匹配盡可能長的字符串。
一個用于修正以上問題的可能方案是用"*"的惰性代替貪婪性。你可以在"*"后面緊跟一個問號"?"來達到這一點
這告訴正則引擎,盡可能少的重復上一個字符。
如下面的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#python 3. 6 #蔡軍生 #http://blog.csdn.net/caimouse/article/details/51749579 # from re_test_patterns import test_patterns test_patterns( 'abbaabbba' , [( 'ab*?' , 'a followed by zero or more b' ), ( 'ab+?' , 'a followed by one or more b' ), ( 'ab??' , 'a followed by zero or one b' ), ( 'ab{3}?' , 'a followed by three b' ), ( 'ab{2,3}?' , 'a followed by two to three b' )], ) |
輸出結果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
'ab*?' (a followed by zero or more b) 'abbaabbba' 'a' ...'a' ....'a' ........'a' 'ab+?' (a followed by one or more b) 'abbaabbba' 'ab' ....'ab' 'ab??' (a followed by zero or one b) 'abbaabbba' 'a' ...'a' ....'a' ........'a' 'ab{3}?' (a followed by three b) 'abbaabbba' ....'abbb' 'ab{2,3}?' (a followed by two to three b) 'abbaabbba' 'abb' ....'abb' |
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:http://blog.csdn.net/caimouse/article/details/78170717