2015-05-29 6 views
3

Я хочу, чтобы обработать некоторую дату строку, которая распечатать как этотКак исправить это регулярное выражение в python?

'node0, node1 0.04, node8 11.11, node14 72.21\n' 
'node1, node46 1247.25, node6 20.59, node13 64.94\n' 

Я хочу, чтобы найти все плавающие точки здесь, это код, я использую

for node in nodes 
    pattern= re.compile('(?<!node)\d+.\d+') 
    distance = pattern.findall(node) 

однако результат, как это

['0.04', '11.11', '4 72'] 

а то, что я хочу это

['0.04', '11.11', '72.21'] 

Любое предложение об исправлении этого регулярного выражения?

ответ

4

В регулярных выражениях . символ интерпретируется в качестве символа подстановки и может соответствовать (почти) любой символ. Таким образом, ваш шаблон поиска фактически позволяет цифру или набор цифр, за которыми следует любой символ, за которым следует другая цифра или набор цифр. Чтобы остановить эту интерпретацию символа точки, сбегите с нее с помощью обратной косой черты \.

(В сторону: Вам не нужно компилировать шаблон регулярного выражения внутри цикла На самом деле, это будет замедлять ваш код вниз..)

pattern = re.compile('(?<!node)\d+\.\d+') 
for node in nodes: 
    distance = pattern.findall(node) 
    print distance 

выход:

[» 0,04' , '11 .11' , '72 0,21 ']
[' 1247,25' , '20 0,59' , '64 .94' ]

+0

Спасибо! Я должен был подумать о том, чтобы переместить шаблон –

4

. в вашем выражении не имеет границ.

for node in nodes: 
    pattern = re.compile(r"(?<!node)\d+\.\d+") 
    distance = pattern.findall(node) 
+0

Так что творишь г здесь делать? –

+0

Ваш ответ работает! Спасибо –

+0

«r» ... »' означает, что любой '' '' 'в строке автоматически экранируется (что не было проблемой здесь, но было бы, если бы у вас было что-то вроде' \ n' там для чего reason'). – Navith

Смежные вопросы