2015-11-02 53 views
1

我有一些字符串像"aaa bbb ccc""aaa bbb ccc ddd"aaa bbb ccc ddd eee」 ......正則表達式匹配的第三,第四,第五......一句話

我需要一個正則表達式,使我無法擺脫的aaa bbb並得到一切。

我在嘗試'\w+\s\w+\s(\w+|\s)+'但它不起作用。

In [171]: r = re.search('\w+\s\w+\s(\w+|\s)+', 'aaa bbb ccc ddd') 

In [172]: r.group(0) 
Out[172]: 'aaa bbb ccc ddd' 

In [173]: r.group(1) 
Out[173]: 'ddd' 

我希望它返回ccc ddd

+0

如果字符串格式是明確的,爲什麼不使用str.split()? –

回答

1

你的方法是行不通的,因爲重複捕獲組取代了以前的捕獲。如果你創建一個非捕獲組(包括量詞)並且圍繞它捕獲一個捕獲組,它應該可以工作。

re.compile(r""" 
    (?:\w+\s){2}  # two words we don't care about 
    (     # begin capturing 
     (?:\w+\s?)+  # 1+ word chars followed by an optional space, 1+ times 
    )     # stop capturing""", re.X) 

雖然我不確定你爲什麼使用正則表達式。是不是str.split更好?

s = 'aaa bbb ccc ddd' 
result = s.split()[2:] 
0

這裏的問題是,你還沒有告訴正則表達式的工作組應涵蓋\w+|\s所有重複......作爲你+是外括號。

相反,嘗試:

>>> r = re.search('\w+\s\w+\s((?:\w+|\s)+)', 'aaa bbb ccc ddd') 
>>> r.group(1) 
>>> 'ccc ddd' 

注意,在這個表達式中,(?: ...)非捕獲括號

相關問題