2017-07-03 75 views
2

以下是一段文字,我有:在正則表達式,捕獲一兩件事,或另一個,或兩者

G1 13.00 
G1 3.00 
     0.00 
     27C 

我想使用正則表達式來捕獲一組是一個字母數字代碼(G1或27C)或另一組是float(xx.xx),或兩者兼而有之。

對於這個例子,我想這個特定的返回:

(G1,13.00) 
(G1,3.00) 
(,0.00) 
(27C,) 

這是最接近的解決方案,我有:

\(?:(\w+) +(\d+\.\d+))|(?: +(\d+\.\d+))|(?: +(\w+))\ 

這種解決方案的問題是,在最後2箇中的值被捕獲在第3和第4組中:

(G1,13.00,,) 
(G1,3.00,,) 
(,,0.00,) 
(,,,27C) 

有關如何解決它的任何想法?

我發現這個問題,這是接近:In a regular expression, match one thing or another, or both但它回答如何匹配而不是捕獲

+0

在PyPI正則表達式模塊,您可以使用'(?|(\ w +)+(\ d + \。\ d +)| +(\ d + \。\ d +)| +( \ w +))' –

回答

1

你只需要相同的模式來匹配相同的捕獲組。

這將返回始終爲2組:

(\w+)? *\b(\d+\.\d+)? 

demo

編輯:如果你要沒有空的比賽,試試這個:

(?=\w)(\w+(?=$|\s))? *\b(\d+\.\d+)? 

demo

+0

謝謝,但它匹配0個字符,然後我給我太多的匹配。 – GregOizo

+0

@GregOizo我編輯了答案,現在讓我檢查一下正則表達式是否可以簡化 – horcrux

+0

嗯,我認爲它沒問題 – horcrux

相關問題