I have a string in which the word “LOCAL” occurs many times. I used the
find() function to search for this word but it returns another word “Locally” as well. How can I match the word “local” exactly?
For this kind of thing, regexps are very useful :
import re print(re.findall('\blocal\b', "Hello, locally local test local.")) // ['local', 'local']
b means word boundary, basically. Can be space, punctuation, etc.
Edit for comment :
print(re.sub('\blocal\b', '*****', "Hello, LOCAL locally local test local.", flags=re.IGNORECASE)) // Hello, ***** locally ***** test *****.
You can remove flags=re.IGNORECASE if you don’t want to ignore the case, obviously.
Below you can use simple function.
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 ":("
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"
Only line1 will match.
You could use regular expressions to constrain the matches to occur at the word boundary, like this:
import re p = re.compile(r'blocalb') p.search("locally") # no match p.search("local") # match p.findall("rty local local k") # returns ['local', 'local']
Do a regular expression search for blocalb
b is a “word boundry” it can include beginnings of lines, ends of lines, punctuation, etc.
You can also search case insensitively.
Look for ‘ local ‘? Notice that Python is case sensitive.
import pyparsing as pp def search_exact_word_in_string(phrase, text): rule = pp.ZeroOrMore(pp.Keyword(phrase)) # pp.Keyword() is case sensitive for t, s, e in rule.scanString(text): if t: return t return False text = "Local locally locale" search = "Local" print(search_exact_word_in_string(search, text))
quote = "No good deed will go unrewarded" location = quote.rfind("go") print(location) // use rfind()