2015-12-03 5 views
2

У меня есть список блюд и предложение.python точное подстрочное соответствие

Я хочу проверить, присутствует ли в предложении блюдо. Однако, если я нормальный

if dish in sentence: 

я в основном получить найденную подстроку. Моя проблема в том, что у меня есть

dish='puri' 
sentence='the mutton shikampuri was good' 

приведенный выше код по-прежнему соответствует пури с shikampuri, который я не хочу.

Если я пытаюсь tokenizing предложения, я не буду в состоянии соответствовать блюдам, как блюда = «Пури Бхаджи»

Есть ли способ, что я могу игнорировать матчи, которые не начинаются с моей тарелкой строкой? В принципе, я хочу игнорировать такие узоры, как «шикампури», когда мое блюдо «пури».

+1

границы слов с re –

+0

Может ли ваше название блюда быть в начале предложения? если нет, то я думаю, что поиск «пури» решает вашу проблему с пробелами до и после вашего блюда. –

ответ

1

Что вам нужно, это re.search с \b.

import re 
if re.search(r"\b"+dish+r"\b",sentence): 
+0

Это то, что мне нужно. Спасибо :) На стороне примечания, что означает 'r' в r "\ b"? – pd176

+0

@ pd176: [Что означает «r» в pythons re.compile (r 'pattern flags?)?] (Http://stackoverflow.com/questions/21104476/what-does-the-r-in-pythons -re-compiler-pattern-flags-mean) – GingerPlusPlus

+0

спасибо! Теперь ясно! – pd176

2

Вы могли бы написать:

if dish in sentence.split():

Это раскалывает предложение пространства в список и ищет блюдо в списке слов.

+0

Это хороший, чистый лайнер. Мне это нравится. – McGlothlin

+0

Да. Но это решение не сможет найти строки с пробелами, например. блюдо = 'пури бхаджи'. Я пропустил эту спецификацию при ответе. Таким образом, решение regex является лучшим выбором здесь. – itsafire

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