Регулярное выражение для точного числа чисел с плавающей точкой

У меня есть строка, содержащая несколько плавающих (или целочисленных) чисел плюс случайные вещи в начале и в конце. Мне нужно регулярное выражение, которое соответствует только строке, содержащей, по крайней мере, заданное количество поплавков, и сообщает как группа первое заданное количество поплавков.

Образец:
Предположим, что строка должна содержать ровно 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 числами поплавка.

EDIT: после многих тестов regex ближе к тому, что я хотел, — это тот, от @Sebastian Proske. Однако, когда я пытаюсь соответствовать 9 плавает компьютерный стойл. Чтение вокруг кажется, что это связано с тем, что regex пытается соответствовать любой из возможных комбинаций, которые могут быть сформированы с помощью + и *. У вас есть какие-то идеи о том, как сделать это возможным?

1 ответ

  1. Это регулярное выражение с группами otional должно работать для вас, чтобы соответствовать по крайней мере 6 числам в каждой строке:

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

    Демонстрация RegEx