[Tutor] Re Module
Steven D'Aprano
steve at pearwood.info
Thu Dec 27 21:39:34 EST 2018
On Thu, Dec 27, 2018 at 08:40:12PM +0530, Asad wrote:
> Hi All ,
>
> I trying find a solution for my script , I have two files :
>
> file1 - I need a search a error say x if the error matches
>
> Look for the same error x in other file 2
>
> Here is the code :
> I have 10 different patterns therefore I used list comprehension and
> compiling the pattern so I loop over and find the exact pattern matching
>
> re_comp1 = [re.compile(pattern) for pattern in str1]
You can move the IGNORECASE flag into the call to compile. Also, perhaps
you can use better names instead of "str1" (one string?).
patterns = [re.compile(pattern, re.IGNORECASE) for pattern in string_patterns]
> for pat in re_comp1:
> if pat.search(st,re.IGNORECASE):
> x = pat.pattern
> print x ===> here it gives the expected output it correct
> match
> print type(x)
> <type 'unicode'>
Be careful here: even though you have ten different patterns, only *one*
will be stored in x. If three patterns match, x will only get the last
of the three and the others will be ignored.
> if re.search('x', line, re.IGNORECASE) is not None: ===> Gives a wrong match
That's because you are trying to match the literal string "x", so it
will match anything with the letter "x":
box, text, ax, equinox, except, hexadecimal, fix, Kleenex, sixteen ...
> Instead if I use :
>
> if re.search(x, line, re.IGNORECASE) is not None: then no match occurs
> print line
Here you are trying to match the variable called x. That is a very bad
name for a variable (what does "x" mean?) but it should work.
If no match occurs, it probably means that the value of x doesn't occur
in the line you are looking at.
Try printing x and line and see if they are what you expect them to be:
print x
print line
--
Steve
More information about the Tutor
mailing list