2013-08-27 3 views
0

Я хотел бы сравнить 2 строки и отобразить любые совпадающие слова.Сравните или сопоставьте 2 строки и отображаемое совпадающее слово

Например -

string1 = "кошачьи лапы" STRING2 = "кошачьи обувь"

Результат должен = "кошка"

Как я могу сделать это с помощью регулярных выражений? Или есть лучший способ сделать это?

ответ

1

Split каждая строка в пробеле и конвертировать оба значения в sets. Их intersection будет содержать все слова, которые они имеют вместе.

>>> set("cat feet".split()).intersection(set("cat shoes".split())) 
set(['cat']) 

Этот метод не имеет отношения к упорядочению слов. «ноги кошки» и «кошки» будут иметь выход «cat», хотя «cat» не отображается в одном и том же положении в обеих строках. Если вы хотите, чтобы найти слова, которые существуют в том же положении в обеих строках, вы можете zip расщепленные строки вместе, и отображать только те слова, которые существуют в том же месте в обоих:

>>> [a for a,b in zip("cat feet".split(), "cat shoes".split()) if a == b] 
['cat'] 
>>> [a for a,b in zip("feet cat".split(), "cat shoes".split()) if a == b] 
[] 
+0

Показывает выразительную силу python. – mvw

+0

Отлично! Чтобы растянуть это дальше, как бы вы соответствовали 2 словам в каждой строке и сохранили их в правильном порядке? , например. «кошки, как ноги» «кошки, как обувь» получать результат - «кот как» набор не собирается сохранить этот порядок это? – NorthSide

+0

Это зависит. Какой правильный порядок для выхода «кошачьих ног» соответствует «как кошелек» и почему? – Kevin

0

Только в отношении использования регулярные выражения: Регулярные выражения эквивалентны конечным автоматам, и они обладают тем свойством, что они имеют только конечное множество состояний, что, в свою очередь, означает, что у них есть вид конечной памяти. Таким образом, вы не можете делать вещи с неизвестной произвольной длинной целевой строкой.

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