2015-06-21 3 views
0

Я пытаюсь создать скрипт с помощью python для поиска и подсчета слова в строке. Слово «@sosiora», у меня есть пример, но он не находит «@sosiora», но «sosiora». Вот мой сценарийПоиск и подсчет регулярных выражений Python с символьным символом

#!/usr/bin/python 
import re 
words = ["@sosiora"] 
exactMatch = re.compile(r'\b%s\b' % '\\b|\\b'.join(words), flags=re.IGNORECASE) 
print len(exactMatch.findall("@riky ini adalah @sosiora dengan huruf s ")) 

я не знаю, но это всегда печать 0. Пожалуйста, помогите мне, я новичок в Python. Спасибо

Дополнительно: Теперь я редактировал свой код, но снова нашел проблему. как извлечь слово, если я их нашел? Вот мой код в настоящее время

#!/usr/bin/python                       
import re                         
words = ["@sosiora","@sosiora#1","@sosiora#2","@sosiora#3","@sosiora#4","@sosiora#5"] 
exactMatch = re.compile('|'.join(words), flags=re.IGNORECASE) 
print len(exactMatch.findall("@riky ini adalah @Sosiora#1 dengan huruf s ")) 

если я нашел "@ sosiora # 1" или "@ sosiora # 2", как извлечь номер? потому что мне нужно это число.

ответ

2

вы собираете регулярное выражение неправильно ... Это должно работать лучше:

#!/usr/bin/python 
import re 
words = ["(@sosiora#(\d+))"] 
exactMatch = re.compile('|'.join(words), flags=re.IGNORECASE) 
text = "@riky ini adalah @Sosiora#1 dengan huruf s" 

m = exactMatch.findall(text) 
print 'Found %d matches' % len(m) 
print 'First word found: ' + m[0][0]  # @Sosiora#1 
print 'First index found: ' + m[0][1]  # 1 
+0

Ничего себе .. Он работает как шарм ... большое вам спасибо – elcicko

+0

Добро пожаловать. Пожалуйста, подумайте о принятии ответа. – smichak

+0

о да ... но как это сделать не сенсибилизировать? скоро я буду, я не могу принять ответ сейчас, я должен ждать 5 минут, – elcicko

1

Это не имеет ничего общего с Python; ваше регулярное выражение неправильно.

Код GREP \b соответствует word boundary - то есть, он будет соответствовать, если на один стороны есть «символ слово» и на другой стороны нет. Символ @ не является символом слова (он не совпадает с \w), и поэтому ваше регулярное выражение ожидает что-то вроде [email protected] (с символом слова слева@).

Исправьте его, удалив левый \b из вашего обычного выражения.

+0

он просто работает сейчас, но как разбить номер строки? Я редактирую свой код. – elcicko

+1

@elcicko: ну это новый вопрос, не связанный с вашим оригинальным. – usr2564301

+0

@kasra, '\ b' совпадает между словом char и символом non-word, наоборот. Таким образом, нет возможности получить границу слова '\ b' между началом строки и' @ 'или пробелом и' @ ', поскольку оба они рассматриваются как символы, отличные от слов. '\ B' является хорошо подходящим, что делает противоположное' \ b' –

Смежные вопросы