2017-01-17 134 views
0

捕捉不需要可選的話,我有以下示例文本避免在正則表達式

text = '. Double-Decker advances to 1st on throwing error. Chris Parmelee to 3rd.' 

我想捕捉以下信息

['Double-Decker', '1st'] 
['Chris Parmelee', '3rd'] 

我想下面的正則表達式

'\. ([A-Za-z\'\-\s]*) (?:advances)*to (1st|2nd|3rd)' 

但它是匹配

['Double-Decker advances', '1st'] 
['Chris Parmelee'  , '3rd'] 

我應該如何來處理不需要的可選字advances

+0

什麼語言/平臺? –

+0

在Python中使用re模塊。我不確定是否要將它定義爲特定語言,並將其作爲Python代碼編寫,但是決定不使用它。 – rwolst

回答

2

用途:

\. ([A-Za-z\'\-\s]*?) (?:advances)*to (1st|2nd|3rd) 

在你的正則表達式有兩個小錯誤:

  1. *運算符是貪婪:你應該使用[A-Za-z\'\-\s]*?
  2. advances沒有後一個空間,所以它將永遠不會匹配「進步」。