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 wel
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']
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 ":("
You could use regular expressions to constrain the matches to occur at the word boundary, like this:
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']
Do a regular expression search for \blocal\b
\b is a "word boundry" it can include beginnings of lines, ends of lines, punctuation, etc.
You can also search case insensitively.
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.
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.