2011-02-03 36 views
3

'{m}'和'{m,n}'之間的區別是什麼?'在http://docs.python.org/library/re.html它說'{m,n}?'匹配範圍在m到n倍的數字,但它不是一個貪婪的搜索。因此,如果它不是一個貪婪的搜索,不管它是什麼,它只能匹配m?python正則表達式

+0

我不確定Python風格的正則表達式,但大多數正則表達式(以及大多數編程語言)都有一些功能相同的構造。這不是一個,但如果你找到它們,你不應該感到驚訝。 – 2011-02-03 07:20:20

+0

@chris:如果有疑問,可以使用在線工具比較幾種語言的正則表達式系統:PHP和javascript獲得http://regex.larsolavtorvik.com/,而python獲得http://ksamuel.pythonanywhere.com。在這裏你可以很容易地看到它不是一個新的構造。 – 2012-01-28 15:01:36

回答

14

{m,n}?將優選地僅匹配m重複,但是如果長時間匹配需要,它將根據需要擴展至n重複。

比較^x{2}y$^x{2,4}?y$

前者將失敗xxxy而後者將匹配。

總結:

x{m}:比賽x正是m倍。

x{m,n}:嘗試匹配xn倍,但如果導致整體匹配失敗,還給根據需要,但比賽至少m倍(貪婪量詞)。

x{m,n}?:嘗試匹配xm倍,但如果導致整體匹配失敗,根據需要展開,但比賽頂多n倍(懶惰量詞)。

1

這是最容易看到使用兩個匹配的組的例子:

>>> re.match(r'(x{1,3}?)(.*)', 'xxxxx').groups() 
('x', 'xxxx') 
>>> re.match(r'(x{1,3})(.*)', 'xxxxx').groups() 
('xxx', 'xx') 

換句話說,{N,M}和{N,M}?都能匹配完全相同的東西;當不止一種方法匹配時,它發生的變化就是分組發生的地方。