2013-03-04 5 views
0

У меня есть строка, которые имеют следующий формат:REGEX шаблона для Exlude определенной строки

some text <br>septembar 1989<br> 

И я использую это регулярное выражение найти месяц и год Часть

<br/?>(?!=b\.)(.*?\b\d{4}\b) 

и я получаю то, что я want- septembar 1989

Однако, теперь у меня есть ситуации, когда <br> вставлена ​​

<br>some text <br>septembar 1989<br> 

результат: some text <br>septembar 1989

Можете ли вы предложить, как изменить свой существующий шаблон для поддержки обоих случаях? Я думаю, мне нужно как-то Exlude <br> от согласования в .*?

+0

Ваш шаблон не работает – eyquem

ответ

0

Попробуйте это

<br/?>([^<]+)\d{4} 

[^<] средства соответствуют ничего, кроме открывающего тега, который является то, что вы хотите.

0
import re 

ss = 'dfgqeg<br>some text <br>septembar 1989<br>' 

reg = re.compile('<br(?: /)?>' 
       '(?!.+?<br(?: /)?>.+?<br(?: /)?>)' 
       '(.+?\d{4})' 
       '<br(?: /)?>') 

print reg.search(ss).group(1) 

.

  • '<br(?: /)?>' уловы <br> и <br /> вхождений

.

  • '(?!.+?<br(?: /)?>.+?<br(?: /)?>)' является упреждающая утверждение,
    он проверяет, что после того места, где она начинается в анализируемом тексте, есть не набор символов описывается как последовательность:

    • .+? любого вида персонажей, но ? заказов, что эта часть должна остановить как только <br> или <br /> встречается
    • <br> или <br />
    • снова любого рода символов, останавливающихся перед тем <br> или <br />
    • <br> или <br />
0

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

import re 
def getDate(str): 
m = re.match("[\<br>]*[\w\s]*\<br>([\w\s]*[12][0-9]{3})",str); 
return m.group(1) 

print getDate("some text <br>dec 1989<br>"); 
print getDate("<br> some text <br>septembar 1989<br>"); 
print getDate("grijesh chuahan <br>feb 2009<br>"); 

Выход:

dec 1989 
septembar 1989 
feb 2009 
Смежные вопросы