Skip to main content
 首页 » 编程设计

python之在正则表达式中,捕获一件事或另一件事或两者

2025年02月15日29yjmyzz

这是我的一段文字:

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