String exact match

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?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 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.

Method 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 ":("

Method 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.

Method 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']

Method 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.

Method 6

Look for ‘ local ‘? Notice that Python is case sensitive.

Method 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']

Method 8

quote = "No good deed will go unrewarded"

location = quote.rfind("go")
print(location)
// use rfind()


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x