Need help capturing output of re.search
John Machin
sjmachin at lexicon.net
Thu Jun 26 19:27:35 EDT 2008
On Jun 27, 8:31 am, joemacbusin... at yahoo.com wrote:
> Hi -
>
> I need help capturing the output of a RegEx search.
> I dont understand why this conditional fails.
>
> Here is the code:
>
> #================================= start snip
> ======================================
> #!/usr/local/bin/python
>
> import os
> import re
>
> dirName = '/home/user/bin/logs'
> os.chdir(dirName)
> files = os.listdir(dirName)
> for myFile in files:
> # print 'checking ...', myFile
> reCheck = ''
> reCheck = re.search(r'\bCC_', myFile)
> # print 'reCheck = ', '=', reCheck, '='
>
> if reCheck == "None":
> print myFile, ' ..... does not qualify'
> else:
> print ' ', myFile, 'qualifies...', reCheck
>
> #================================= end snip
> ======================================
>
> The problem is that reCheck never == None.
> So all of the files "qualify". My understanding of the
> re.search (re.search(r'\bCC_', myFile)) is ...
> 1) give me only files that start with a word boundary (\b)
> 2) followed by a (CC_)
> 3) in myFile
>
> Why doesn't the output of the re.search load reCheck with valid data?
> (like "None")
Because "None" is not "valid data" in this case. re.search returns
None or a MatchObject instance.
>>> type(None)
<type 'NoneType'>
>>> type("None")
<type 'str'>
>>> None == "None"
False
>>>
You may like to read this: http://www.amk.ca/python/howto/regex/
If you want to check for strings that start with some condition, you
need re.match, not re.search.
You don't need the '\b'; re.match(r'CC_', filename) would do the job.
But then so would filename.startswith('CC_')
HTH,
John
More information about the Python-list
mailing list