这是我的一段文字:
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但它回答了如何匹配而不是捕获。
请您参考如下方法:
你只需要相同的模式被相同的捕获组匹配。
这将始终返回 2 个组:
(\w+)? *\b(\d+\.\d+)?
参见 demo
编辑:如果你不想空匹配,试试这个:
(?=\w)(\w+(?=$|\s))? *\b(\d+\.\d+)?
参见 demo
