Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在正则表达式中,捕获一个或另一个对象,或捕获两者_Python_Regex - Fatal编程技术网

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

Python 在正则表达式中,捕获一个或另一个对象,或捕获两者,python,regex,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组

这是我的一段文字:

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组中捕获:

(G1,13.00,,)
(G1,3.00,,)
(,,0.00,)
(,,,27C)
有没有办法解决这个问题


我发现这个问题很接近:但它回答了如何匹配和不捕获。

您只需要相同的模式被相同的捕获组匹配即可

这将始终返回两个组:

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

编辑:如果不需要空匹配,请尝试以下操作:

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

请参见

谢谢,但它与0个字符匹配,然后我给了我太多的匹配。@GregOizo我编辑了答案,现在让我检查正则表达式是否可简化好了,我认为使用PyPi正则表达式模块可以,您可以使用
(?|(\w+)(\d+。\d+)+(\d+。\d+)+)+(\d+)(\d+)+)(\w+)