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 _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor