首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python正则表达式从字符串中提取数字

用Python正则表达式从字符串中提取数字
EN

Stack Overflow用户
提问于 2015-09-17 18:50:08
回答 1查看 295关注 0票数 0

我运行了正则表达式

代码语言:javascript
复制
re.findall(r"max .*([\d]+\.\d+)",m,re.I)

关于输入

代码语言:javascript
复制
mps): 22.624001\r\nMax Phase Current Gain Error (Percent): 0.500000\r\nMax Phase Current Offset Error (Amps): 0.113120\r\nFan Control Timer (nS): 60000002048.000008\r\nPWM Dead Time (uS): 0.000004\r\n\r\n--------------------------AXIS_INSTANCE_3--------------------------\r\n\r\nPiccolo ServoIO Stats :\r\n\tTotal Missed Read Phase : 0\r\n\tTotal Missed Write Phase : 0\r\n\tTotal Read CRC Error : 0\r\n\tTotal Write CRC Error : 0\r\n\tTotal Invalid Seq. ID : 0\r\n\tTotal (General) Sequence Errors : 1\r\n\r\nOmap to Piccolo Read Packet :\r\nCommand/Fault Word : 0x0\r\nSequenceAndIncipSize : 0xc0\r\n\r\nOmap to Piccolo Read Packet :\r\nCommand/Fault Word : 0x0\r\nSequenceAndIncipSize : 0xc0\r\n\r\nPiccolo to Omap Read Packet :\r\nUPhase Current : 32779\r\nWPhase Current : 32776\r\nVbus : 0\r\n\r\nOmap to Piccolo Write Packet :\r\nUPhase Mod Idx : 0\r\nVPhase Mod Idx : 0\r\nWPhase Mod Idx : 0\r\n\r\nPiccolo to Omap Write Packet :\r\nStatus/Fault Word: 0x0\r\nSequenceAndIncipSize: 0x70\r\n\r\n\r\nPiccolo to Omap Low-Speed Data :\r\nPiccolo ADC Temp : 0.000000 degC\r\nPiccolo Igbt Temp : 23.618481 degC\r\n\r\nPower Interface Scaling:\r\nPhase Current Feedback Offset Counts: 32767.000000\r\nPhase Current Feedback Gain Scaling: -0.002142\r\nDC Bus Voltage Feedback Offset Counts: 0.000000\r\nDC Bus Voltage Feedback Gain Scaling: 0.013757\r\nMax Phase Current (Amps): 609.198303\r\nPhase Current Gain Error Measurement Point (Amps): 22.624001\r\nMax Phase Current Gain Error (Percent): 0.500000\r\nMax Phase Current Offset Error (Amps): 0.113120\r\nFan Cont

这不能给我正确的结果。它跳过两个或更多位数。怎么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-17 19:08:02

我猜,你想使用在点对点上进行懒惰的比赛

代码语言:javascript
复制
max .*?(\d+\.\d+)

默认情况下,大多数正则表达式都是贪婪的(也就是说,它们试图从左到右尽可能匹配)。当您说max .*时,它会匹配Max,然后匹配到字符串末尾的所有内容。然后,您的代码“回溯”,直到找到\d+\.\d+的最后一个实例。在量词后添加? (*+等)意味着一旦找到下一个序列(在本例中是数字),它就停止匹配。

您还会注意到,我在第一个\d中删除了不必要的字符类。

有时,如果你可以的话,我建议你避免懒惰的重复。似乎您的所有输入都以类似的格式格式化-- "Max 字段:value“--意思是我们可以是使用表达式更具体

代码语言:javascript
复制
(Max [^:]+): ([\d.]+)

就我个人而言,我更愿意在我的(或雇员的)代码中看到后一个正则表达式。它有较少的空间,意外的后果,有更好的表现,并更明显的是,你想要它匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32637893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档