【发布时间】: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