2014-02-18 2 views
3

Пожалуйста, укажите мне сообщение, если оно уже существует для этого вопроса.Добавить синтаксис слова границы в список строк

Как я могу эффективно добавить синтаксис границы слова в список строк?

Так, например, я хочу убедиться, что слова ниже в badpositions соответствуют только слову, поэтому я хотел бы использовать re.search('\bword\b', text).

Как получить слова в плохих позициях принимать форму ['\bPresident\b', '\bProvost\b'] и т.д.

text = ['said Duke University President Richard H. Brodhead. "Our faculty look forward'] 
badpositions = ['President', 'Provost', 'University President', 'Senior Vice President'] 
+0

Используйте цикл и следуйте инструкциям [this] (http://stackoverflow.com/questions/6930982/variable-inside-python-regex). – tenub

+1

Если вы можете сделать цикл поиска, это гораздо более быстрый поиск, когда все строки объединены в одно регулярное выражение. Двигатель настраивает Trie. Пример '\ b (?: Президент | Провост | Президент университета | ) \ b'. Как правило, просто связано с объединением и конкатенацией строк для создания строки регулярного выражения. – sln

+1

Обычно принято принимать ответ, который отвечает на ваш вопрос! –

ответ

6
re_badpositions = [r"\b{word}\b".format(word=word) for word in badpositions] 

indexes = {badpositions[i]:re.search(re_badpositions[i],text) for i in range(len(badpositions))} 

Если я вас правильно понял, вы хотите, чтобы найти начальный индекс всех слов, которые соответствуют точно (то есть \bWORD\b) в строке text. Это, как я хотел бы сделать это, но я, конечно, добавив шаг здесь, вы можете так же легко сделать:

indexes = {word: re.search("\b{word}\b".format(word=word),text) for word in badpositions} 

Я нахожу это немного более понятным, чтобы создать список регулярных выражений для поиска с, затем выполняйте поиск по ним отдельно, чем для одновременного размещения этих регулярных выражений. Это ПОЛНОСТЬЮ из-за личных предпочтений.

+0

Спасибо! по какой-то причине я думал, что .format() работает только для операторов печати, но теперь я вижу, что это обычный инструмент для динамической замены строк. – user3314418

+0

Я лично считаю, что «слово» в фигурных скобках несколько избыточно. 'r" \ b {} \ b ".format (word)' кажется столь же читаемым ИМО. В противном случае, отличный ответ. (+1) – iCodez

+0

@iCodez снова, больше вопрос личных предпочтений. Я научился все явно размещать в фигурных скобках, потому что часто для тестирования я буду делать 'logging.info (« x is {x] и y is {y} и z is {z} ". Format (** locals())) 'затем измените его на то, что мне действительно нужно потом. –

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