Re: Need help capturing output of re.search
On Jun 27, 8:31 am, [EMAIL PROTECTED] 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 -- http://mail.python.org/mailman/listinfo/python-list
Re: Need help capturing output of re.search
You may like to read this: http://www.amk.ca/python/howto/regex/ This is a good resource. Thank you. Someone else pointed out that I needed to change the if reCheck == None: to if reCheck == None: # removed the s This worked great! Thanks! --JM -- http://mail.python.org/mailman/listinfo/python-list
Re: Need help capturing output of re.search
On Jun 27, 10:01 am, [EMAIL PROTECTED] wrote: You may like to read this:http://www.amk.ca/python/howto/regex/ This is a good resource. Thank you. Someone else pointed out that I needed to change the if reCheck == None: to if reCheck == None: # removed the s Somebody else should indeed remain anonymous if they told you that. Use if reCheck is None: or even better: if not reCheck: It's not obvious from your response if you got these points: (1) re.match, not re.search (2) filename.startswith does your job simply and more understandably -- http://mail.python.org/mailman/listinfo/python-list
Re: Need help capturing output of re.search
On Jun 26, 5:12 pm, John Machin [EMAIL PROTECTED] wrote: On Jun 27, 10:01 am, [EMAIL PROTECTED] wrote: You may like to read this:http://www.amk.ca/python/howto/regex/ This is a good resource. Thank you. Someone else pointed out that I needed to change the if reCheck == None: to if reCheck == None: # removed the s Somebody else should indeed remain anonymous if they told you that. Use if reCheck is None: or even better: if not reCheck: It's not obvious from your response if you got these points: (1) re.match, not re.search (2) filename.startswith does your job simply and more understandably Understood. I replaced re.search with re.match (although both work) can filename.startswith be used in a conditional? ala: if filename.startswith('CC_'): processtheFile() Thanks for the great help! -- http://mail.python.org/mailman/listinfo/python-list
Re: Need help capturing output of re.search
On Jun 27, 10:45 am, [EMAIL PROTECTED] wrote: On Jun 26, 5:12 pm, John Machin [EMAIL PROTECTED] wrote: On Jun 27, 10:01 am, [EMAIL PROTECTED] wrote: You may like to read this:http://www.amk.ca/python/howto/regex/ This is a good resource. Thank you. Someone else pointed out that I needed to change the if reCheck == None: to if reCheck == None: # removed the s Somebody else should indeed remain anonymous if they told you that. Use if reCheck is None: or even better: if not reCheck: It's not obvious from your response if you got these points: (1) re.match, not re.search (2) filename.startswith does your job simply and more understandably Understood. I replaced re.search with re.match (although both work) Not so. Consider a filename that starts with some non-alphanumeric characters followed by CC_ e.g. ---CC_foo. re.search will score a hit but re.match won't. It's quite simple: if you want hits only at the beginning of the string, use re.match. Please don't say I don't have any filenames like that, so it doesn't matter ... it's like saying They couldn't hit an elephant at this distance. can filename.startswith be used in a conditional? ala: if filename.startswith('CC_'): processtheFile() Of course. *Any* expression can be used in a condition. This one returns True or False -- a prime candidate for such use. Why are you asking? -- http://mail.python.org/mailman/listinfo/python-list