2014-02-17 2 views

ответ

1

Это предпросмотр на основе регулярных выражений соответствуют последним цифрам в строке:

\d+(?=\D*$) 
1

Я пытаюсь найти способ сделать это, кроме этих два:

небольшого изменения в вашем первый подход. Захватите цифры, за которыми следует все, что не является цифрой в конце строки.

>>> import re 
>>> test = "123_4242_24242lj.:" 
>>> print re.findall(r'(\d+)\D*$', test) 
['24242'] 
>>> 

Другой альтернативный будет заменителя:

>>> re.sub(r'.*?(\d+)\D*$', "\\1", test) 
'24242' 
+1

Но это не работает, если 'test = 123_4242_24242'. – thefourtheye

+1

@ thefourtheye Отличная точка! Вы, действительно, гений. Однако изменение модификатора должно исправить это. – devnull

2

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

Регулярные выражения трудно читать. Не только другими: пусть пройдет 10 дней с тех пор, как вы написали один, и вам будет трудно читать тоже. Это затрудняет их поддержку.

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

re.findall(r"\d+", test)[-1] 

... чистый, краткий и сразу же очевидно.

+2

Даже если производительность не является критичной, если RegEx используется более одного раза, я рекомендую компилировать ее с помощью 're.compile' – thefourtheye

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