2015-02-25 4 views
-2

Мне нужна помощь с регулярным выражением, чтобы найти определенные блоки в файле. Эти блоки имеют 4 десятичных числа с запятой и разделителем пробелов. Пример:Regex, чтобы найти ровно 4 десятичных значения в строке

1.23,4.567 8.9,10.1112 

Регулярное выражение мне нужно, это: ДЕСЯТИЧНОЕ, ДЕСЯТИЧНЫЕ ДЕСЯТИЧНОЕ, ДЕСЯТИЧНОЕ (ровно 4 значения)

1.23,4.567 8.9,10.1112 #True 
1.23,4.567 8.9,10.1112 1.2,3.45 #False 
text 1.23,4.567 8.9,10.1112 text #True 

Thx за помощью.

+0

На каком языке вы работаете? –

+0

Язык Python. – Trolli

ответ

0

Лучше использовать привязанное регулярное выражение, как показано ниже.

r'^\D*\d+\.\d+,\d+\.\d+ \d+\.\d+,\d+\.\d+\D*$' 

\D* соответствует любому знаку без знака, нолю или более раз.

Пример:

>>> s = ['1.23,4.567 8.9,10.1112', '1.23,4.567 8.9,10.1112 1.2,3.45', 'text 1.23,4.567 8.9,10.1112 text'] 
>>> for i in s: 
     if re.match(r'^\D*\d+\.\d+,\d+\.\d+ \d+\.\d+,\d+\.\d+\D*$', i): 
      print(i) 


1.23,4.567 8.9,10.1112 
text 1.23,4.567 8.9,10.1112 text 

Для того, чтобы печатать только блок.

>>> for i in s: 
     m = re.match(r'^\D*(\d+\.\d+,\d+\.\d+ \d+\.\d+,\d+\.\d+)\D*$', i) 
     if m: 
      print(m.group(1)) 


1.23,4.567 8.9,10.1112 
1.23,4.567 8.9,10.1112 
+0

Хорошо, я попробую это. Благодарю. – Trolli

1

Пожалуйста, попробуйте следующее:

^\D*([\d\.]+,[\d\.]+\s[\d\.]+,[\d\.]+)\D*$ 

Я думаю, что это решит вашу проблему. Я прикрепил экранный снимок, используя указанное выше регулярное выражение. Я надеюсь, это поможет вам.

enter image description here

+1

Обратите внимание, что это будет соответствовать также недопустимым формам цифр, таким как '2 ....' –

0

Вот более простой вариант. Я предполагаю, что либо «» и „белое пространство“ отделили бы число (с десятичной)

/(\d+\.\d+(,|\s+)?){4}/ 

, если вы думаете, есть модель, которая имеет как «» и „пространство“

/(\d+\.\d+,\s+){4}/