2010-11-13 4 views
11

У меня есть строка, в которой слово «LOCAL» встречается много раз. Я использовал функцию find() для поиска этого слова, но он также возвращает другое слово «Locally». Как я могу точно совместить слово «local»?Строковое точное соответствие

ответ

30

Для такого рода вещи, регэкспы очень полезны:

import re 

print(re.findall('\\blocal\\b', "Hello, locally local test local.")) 
// ['local', 'local'] 

\ Ь означает границу слова, в основном. Может быть пространство, знаки препинания и т.д.

Edit для комментариев:

print(re.sub('\\blocal\\b', '*****', "Hello, LOCAL locally local test local.", flags=re.IGNORECASE)) 
// Hello, ***** locally ***** test *****. 

Вы можете удалить флаги = re.IGNORECASE, если вы не хотите, чтобы игнорировать случай, очевидно.

+0

благодарен за его работу .. но есть еще одна проблема, когда я пытаюсь заменить «Локальный» другим словом, он также заменяет «локально», как «***** ly». –

+0

Это то же самое, но вы используете re.sub вместо re.findall. Я редактировал свой пост. –

+0

спасибо .... его работа .. я пытался его с трех дней .. ты действительно гуру-питон. –

0

Ищите «местные»? Обратите внимание, что Python чувствителен к регистру.

0

Выполните поиск по регулярному выражению для \ blocal \ б

\ Ь «слово boundry» может включать в себя зачатки линий, концы линий, знаков препинания и т.д.

Вы также можете искать случай бесчувственно.

1

Вы можете использовать регулярные выражения, чтобы ограничить матчи происходят на границе слова, как это:

import re 
p = re.compile(r'\blocal\b') 
p.search("locally") # no match 
p.search("local") # match 
p.findall("rty local local k") # returns ['local', 'local'] 
9

Ниже вы можете использовать простую функцию.

def find_word(text, search): 

    result = re.findall('\\b'+search+'\\b', text, flags=re.IGNORECASE) 
    if len(result)>0: 
     return True 
    else: 
     return False 

Использование:

text = "Hello, LOCAL locally local test local." 
search = "local" 
if find_word(text, search): 
    print "i Got it..." 
else: 
    print ":(" 
1
line1 = "This guy is local" 
line2 = "He lives locally" 

if "local" in line1.split(): 
    print "Local in line1" 
if "local" in line2.split(): 
    print "Local in line2" 

Только line1 будет соответствовать.