2015-03-19 4 views
0

У меня в настоящее время проблема с удалением конца строк с использованием регулярного выражения. Я пробовал использовать .partition с безуспешными результатами. Я пытаюсь использовать regex безуспешно. Все строки соответствуют формату some random words **X*.* Some more words. Где * - это цифра, а X - буква X. Например, 21X2.5. Все после этой динамической строки должно быть удалено. Я пытаюсь использовать re.sub('\d\d\X\d.\d', string). Может ли кто-нибудь указать мне в правильном направлении с регулярным выражением и как разбить строку?Динамическое удаление строки с regex python

Ожидаемый выход следует читать: some random words 21X2.5

Спасибо!

+0

Каков ваш ожидаемый результат? Вы хотите заменить «21X2.5» на что-то еще? или удалить конец строк? – Kedar

ответ

0

Неправильное выражение в регулярном выражении. Самая большая проблема заключается в том, что вам нужно избежать периода. В противном случае регулярное выражение обрабатывает период как совпадение с любым символом. Чтобы соответствовать только этому шаблону, вы можете использовать что-то вроде:

re.findall('[\d]{2}X\d\.\d', 'asb12X4.4abc') 

[\d]{2} соответствует последовательности из двух целых чисел, X соответствует буквально X, \d соответствует одно целому числу, \. соответствует буквальному и \d совпадает с окончательным. целое число.

Это будет соответствовать только 12X4.4.

Похоже, вы вместо этого хотите удалить все после соответствие выражению. Для того, чтобы получить желаемый результат, вы можете сделать что-то вроде:

re.split('(.*?[\d]{2}X\d\.\d)', 'some random words 21X2.5 Some more words')[1] 

, которая будет возвращать some random words 21X2.5. Это выражение тянет все до и включает согласованное регулярное выражение и возвращает его, отбрасывая конец.

Дайте мне знать, если это работает.

+0

Спасибо Джейсону! работал как шарм - я не был уверен в регулярном выражении. – beepboop

2

Используйте следующие регулярные выражения:

re.search("(.*?\d\dX\d\.\d)", "some random words 21X2.5 Some more words").groups()[0] 

Выход:

'some random words 21X2.5' 
+1

Вместо 'groups() [0]' вы можете использовать 'group()', и скобки не нужны в шаблоне. –

0

Чтобы удалить все после шаблон, то есть сделать так, как вы говорите ...:

s = re.sub(r'(\d\dX\d\.\d).*', r'\1', s) 

Конечно, если вы имеете в виду что-то еще, чем то, что вы сказали, что-то другое больно нужно! Например, если вы хотите также удалить саму картину, а не только (как вы сказали) что после это:

s = re.sub(r'\d\dX\d\.\d.*', r'', s) 

и так далее, в зависимости от того, что, собственно, являются ваши спецификации -)

!