Search code examples
pythonregexstringmatchword-boundary

Why isn't this regex matching a string with percentage symbol?


I have a file which has the following input :

xa%1bc
ba%1bc
.
.

and so on. I want to use match and regex to identify the lines which have a%1bin them. I am using

 import re
 p1 = re.compile(r'\ba%1b\b', flags=re.I)
 if re.match(p1,linefromfile):
    continue

It doesnt seem to detect the line with %1. What is the issue? Thanks


Solution

  • match only search the pattern at the beginning of the string, if you want to find out if a string contains a pattern, use search instead. Besides you don't need the word boundary, \b:

    re.search(pattern, string, flags=0)

    Scan through string looking for the first location where the regular expression pattern produces a match, and return a corresponding match object. Return None if no position in the string matches the pattern; note that this is different from finding a zero-length match at some point in the string.

    re.match(pattern, string, flags=0)

    If zero or more characters at the beginning of string match the regular expression pattern, return a corresponding match object. Return None if the string does not match the pattern; note that this is different from a zero-length match.

    import re
    if re.search(r"a%1b", "xa%1bc"):
        print("hello")
    # hello