2015-10-05 4 views
1

Я пробую следующий код, но кажется, что я делаю что-то неправильно.mess с regex python

import re 

lista = ["\\hola\\01\\02Jan\\05\\03", 
"\\hola\\01\\02Dem\\12", 
"\\hola\\01\\02March\\12\\04"] 

for l in lista: 
    m= re.search("\\\\\d{2,2}\\\\\d{2,2}[a-zA-Z]+\\\\\d{2,2}\s",l) 
    if m: 
     print (m.group(0)) 

Результат должен быть второй строкой. Я пробовал без \s, но результат соответствует всем строкам.

+0

Вы можете включать ожидаемый выход в вопросе? – garg10may

+0

есть. Я редактировал код, потому что произошла ошибка. – kamboj

+0

Если вам просто нужно получить четыре последовательности, вы можете сделать это:^(?: \\\\ [^ \\] +) {4} $. Но если вы заботитесь о том, какой текст содержит эти последовательности, вам нужно будет уточнить. – lintmouse

ответ

2

Вы можете попробовать это регулярное выражение:

lista = [r"\hola\01\02Jan\05\03", r"\hola\01\02Dem\12", r"\hola\01\02March\12\04"] 

>>> for l in lista: 
...  m = re.search(r"\\\d{2,2}\\\d{2,2}[a-zA-Z]+\\\d{2}$", l) 
...  if m: 
...    print m.group() 
... 

Выход:

\01\02Dem\12 
  • Используйте r"..." форма объявить регулярное выражение и введите в качестве исходного строки
  • Используйте якорь $, чтобы избежать согласование нежелательного ввода
+1

спасибо. с 'r' мне пришлось использовать только два обратных слэша (' \\ ') в регулярном выражении. пожалуйста, исправьте код, если это возможно. Еще раз спасибо, что узнал новое о регулярном выражении. – kamboj

0

Вы можете использовать следующий код без регулярных выражений:

>>> for l in lista: 
     totalNo = l.count('\\') 
     if totalNo == 4: 
      print l