【问题标题】:Regex to match an exact number of floating point numbers正则表达式匹配精确数量的浮点数
【发布时间】:2016-10-05 14:21:05
【问题描述】:

我有一个字符串,其中包含几个浮点数(或整数)以及开头和结尾的随机数。我想要一个正则表达式,它只匹配至少包含给定数量的浮点数的字符串,并将第一个给定的浮点数作为一个组报告。

示例: 假设字符串必须正好包含 6 个浮点数。请记住,每个字符串的开头和结尾都包含随机内容,因此不能使用 $^

5.13e12  4.5774  4.743E-1  .655E3               NO MATCH (only 4 float)
5.13e12  4.5774  4.743E-1  .655E3 1 2           MATCH (6 float -> all in 1 group)
5.13e12  4.5774  4.743E-1  .655E3 1 2 3 5 6     MATCH (6 first float in a group)

直到现在我详细阐述了以下内容

((\s*\d*\.?\d+[Ee]?[+-]?\d*){6})

但这个也匹配少于 6 个浮点数的行。

编辑:经过多次测试,正则表达式更接近我想要的是来自@Sebastian Proske 的那个。但是,当我尝试匹配 9 时,计算机会停止。仔细阅读似乎这是由于正则表达式尝试与可以使用 + 和 * 形成的任何可能组合匹配。您对如何实现这一点有任何想法吗?

【问题讨论】:

  • 您的模式目前将匹配任何包含 6 位数字的行,因为分隔符 (\s) 是可选的。你可以试试(?:\d*\.?\d+[Ee]?[+-]?\d*)(\s+(?:\d*\.?\d+[Ee]?[+-]?\d*)){5}
  • @SebastianProske 您的评论很有帮助:如果我只是在我的正则表达式中输入\s+ 而不是\s*,它就可以工作。基本上会是以下...\s*((\d*\.?\d+[Ee]?[+-]?\d*\s+){6})
  • @RiccardoPetraglia 请记住,您的模式需要(并匹配)您丢失的数字后的额外空格。如果行尾没有垃圾,这可能会导致误报。
  • 在这里查看版本:regex101.com/r/hiORZo/2((?:^|[\s]+)(\d*\.?\d+(?:[Ee][+-]?\d+)?)){6}

标签: python regex python-2.7


【解决方案1】:

这个带有可选组的正则表达式应该可以让您在每行中匹配至少 6 个数字:

(?:[+-]?\d*\.?\d+(?:E[+-]?\d+)?(?:\s+|$)){6}

RegEx Demo

【讨论】:

  • 当我的字符串位于其他一些东西的中间时,我要求它匹配的东西......
  • 好的,然后从正则表达式中删除 ^ 以使其在任何地方匹配。在答案中查看更新的演示
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 2015-03-17
  • 2022-11-16
  • 1970-01-01
相关资源
最近更新 更多