2015-08-31 7 views
0

Я хочу найти hashtag с 1 до 6 цифр после с python 2.7, и мое регулярное выражение не соответствует должным образом.Как regex hashtag с цифрами после в python2?

Вот мой пример:

chaine = "[url=http://forum.darkgyver.fr/t27142-probleme-boitier-papillon-faisceau#265132:<UID>]http://forum.darkgyver.fr/t27142-probleme-boitier-papillon-faisceau#265132[/url:<UID>]" 
regex = re.compile('http://forum.darkgyver.fr/(.*)\#(\d{1-6})') 
match = regex.search(chaine) 
if match: 
     pos1 = match.start() 
     pos2 = match.end() 
else:  
     pos1 = -1 
     pos2 = -1 

print "pos1 %d" % pos1 
print "pos2 %d" % pos2 
url_tempo = chaine[pos1:pos2] 
print "url_tempo %s" % url_tempo    
posPost = pos1 + url_tempo.find('#') + 1 
numPost = chaine[posPost:pos2] 
print "numPost %s" % numPost   

Это первое регулярное выражение возвращает "не матч". Возможно, хэштег не объявлен должным образом.

Так я изменил свое регулярное выражение следующим образом:

regex = re.compile('http://forum.darkgyver.fr/(.*)\#([0-9]+(:| | |\n|\[|$))') 

, который соответствует неправильное положение pos2=161 должно быть pos2=80

Как я могу исправить мое регулярное выражение хэштегом и 1 до 6 цифр позади?

+3

'\ d {1,6}' ..................... not '\ d {1-6}' – vks

+0

Спасибо, Мартин, за этот первый ответ. Я попробовал regex = re.compile ('http://forum.darkgyver.fr/ (.*) \ # (\ d {1,6}) ') Он соответствует частично, pos2 должен быть «80» вместо «160», а numpost не содержит хорошей строки, должен быть только «265132» pos2 = 160 numPost 265132: ] http://forum.darkgyver.fr/t27142-probleme-boitier-papillon-faisceau#265132 – Francois

ответ

0

Вы пытаетесь извлечь хэштег из URL-адреса. Из строки, которую вы указали, было бы логичнее попытаться просто извлечь все цифры между # и : символами. Если у вас есть hashtag с 7 цифрами, вы хотите все 7 цифр или хотите не совпадать? В любом случае, я бы предположил, что вам не нужны первые 6 цифр.

Используя оператор группировки (), если есть совпадение, ваш хэштэг можно увидеть, просто используя команду qroup(1), избегая необходимости попробовать и извлечь ее, используя строчную нарезку.

Ниже показывает один из возможных способов извлечения хэштегом:

chaine = "[url=http://forum.darkgyver.fr/t27142-probleme-boitier-papillon-faisceau#265132:<UID>]http://forum.darkgyver.fr/t27142-probleme-boitier-papillon-faisceau#265132[/url:<UID>]" 

re_hashtag = re.search(re.escape("http://forum.darkgyver.fr") + ".*?#(\d+):", chaine) 

print re_hashtag.start()  
print re_hashtag.end() 
print re_hashtag.group(1) 

Это будет отображаться следующее:

5 
80 
265132 

Положение начало 5 потому, что она начинается с согласования вашего избранника http ,

Примечание. Я использовал функцию escape(), чтобы убедиться, что ваш URL-адрес правильно экранирован. Если вы печатаете следующий вы увидите, как должно было быть написано ваше начальное регулярное выражение:

print re.escape("http://forum.darkgyver.fr") 

Отдает:

http\:\/\/forum\.darkgyver\.fr 
0

Спасибо Мартину за ваш ответ.

  • я должен правильно бежать мой URL с функцией побега

  • Я собираюсь использовать re.search найти цифру после хэштегом непосредственно в массив: re.search (re.escape (» http://forum.darkgyver.fr ") +" * # (\ d +):.?», Chaine)

Я с вами согласен, что это самое лучшее решение. François