String exact match

后端 未结 7 1574
悲哀的现实
悲哀的现实 2020-11-29 08:13

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

相关标签:
7条回答
  • 2020-11-29 08:51

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

    0 讨论(0)
  • 2020-11-29 08:54

    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 ":("
    
    0 讨论(0)
  • 2020-11-29 08:57

    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']
    
    0 讨论(0)
  • 2020-11-29 09:05

    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.

    0 讨论(0)
  • 2020-11-29 09:09
    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.

    0 讨论(0)
  • 2020-11-29 09:13

    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.

    0 讨论(0)
提交回复
热议问题