2017-07-03 73 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

相关问题