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+)