在正则表达式中,捕获一个或另一个,或两者

时间:2017-07-03 13:49:24

标签: python regex

以下是我的一段文字:

G1   13.00
G1    3.00
      0.00
       27C

我正在尝试使用正则表达式来捕获一个字母组,这是一个字母数字代码(G1或27C)或另一个组是浮点数(xx.xx),或两者都是。

对于这个例子,我想要这个特定的回报:

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

这是我最接近的解决方案:

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

此解决方案的问题是在第3组和第4组中捕获了最后2行值:

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

关于如何解决它的任何想法?

我发现这个问题很接近:In a regular expression, match one thing or another, or both但是它解答了如何匹配而不是捕获

1 个答案:

答案 0 :(得分:1)

您只需要相同的模式匹配相同的捕获组。

这将始终返回2组:

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

请参阅demo

编辑:如果你不想空匹配,试试这个:

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

请参阅demo