Регулярное выражение повторного использования Python - PullRequest
4 голосов
/ 27 февраля 2012

Я должен соответствовать тексту.

Ej:

text = 'C:x=-10.25:y=340.1:z=1;'

Где значения после x, y или z принимают значения, соответствующие:

-?\d{1,3}(\.\d{1,2})?

Как я могу использовать это снова?

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

Есть более короткий способ выразить это?

r'^C:x=-?\d{1,3}(.\d{1,2})?:y=-?\d{1,3}(.\d{1,2})?:z=-?\d{1,3}(.\d{1,2})?;$'

Ответы [ 3 ]

8 голосов
/ 27 февраля 2012

Люди иногда делают такие вещи

label_value = r'\w=-?\d{1,3}(\.\d{1,2})?'
line = r'^C:{0}:{0}:{0};$'.format( label_value )
line_pat= re.compile( line )

Это немного умнее.

label_value = r'(\w)=(-?\d{1,3}(?:\.\d{1,2})?)'
line = r'^C:{0}:{0}:{0};$'.format( label_value )
line_pat= re.compile( line )

Почему?Он собирает метку и все значение с плавающей запятой, а не только цифры справа от десятичной точки.

В маловероятном случае, если порядок меток на самом деле имеет значение .

value = r'(-?\d{1,3}(?:\.\d{1,2})?)'
line = r'^C:x={0}:y={0}:z={0};$'.format( value )
line_pat= re.compile( line )

Для этого требуются три метки в указанном порядке.Одна из тех вещей, которая может измениться.

0 голосов
/ 27 февраля 2012

Это вернет не ложных отрицаний, а небольшое количество ложных срабатываний:

'^C(:[xyz]=-?\d{1,3}(.\d{1,2})?){3}'

Ложные срабатывания - это случаи, когда x, y и z встречаются в неправильных комбинациях (то есть y: x: z, x: x: z и т. д.).

0 голосов
/ 27 февраля 2012

Так как в регулярном выражении, которое я выставил, была ошибка, я ее удалил.

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

Хотя это и не Python, я обычно использую этот

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...