Question :
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?
Answer #1:
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.
Answer #2:
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
Using:
text = "Hello, LOCAL locally local test local."
search = "local"
if find_word(text, search):
print "i Got it..."
else:
print ":("
Answer #3:
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.
Answer #4:
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']
Answer #5:
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.
Answer #6:
Look for ‘ local ‘? Notice that Python is case sensitive.
Answer #7:
Using Pyparsing:
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))
Which Yields:
['Local']
Answer #8:
quote = "No good deed will go unrewarded"
location = quote.rfind("go")
print(location)
// use rfind()