我有包含字符串几个浮子(或整数)编号加上随机的东西在开始和结束时。我想要一个只匹配包含至少给定数量的float的字符串的正则表达式,并将第一个给定数量的float值报告为一个组。正则表达式匹配浮点数的确切数目
例子: 假设该字符串必须包含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}' –
或者['^ \ d * \ \ d + [EE] [+ - 。?????] \ d *(?: + \ d * \ \ d + [EE] ?[+ - ]?\ d *){5}'](https://regex101.com/r/hCO1kJ/2)。 –
@SebastianProske您的评论有帮助:如果我只是把'\ s +'而不是'\ s *'在我的正则表达式中有效。基本上是以下...'\ S *((\ d * \ \ d + [EE] [+ - ]???\ d * \ S +){6})' –