Regular expression that skips single line comments?
python.list at tim.thechases.com
Mon Jan 19 17:40:26 CET 2009
> I am trying to parse a set of files that have a simple syntax using
> RE. I'm interested in counting '$' expansions in the files, with one
> minor consideration. A line becomes a comment if the first non-white
> space character is a semicolon.
> e.g. tests 1 and 2 should be ignored
> sInput = """
> ; $1 test1
> ; test2 $2
> test3 ; $3 $3 $3
> $5 test5
> test7 $7 test7
> Required output: ['$3', '$3', '$3', '$5', '$6', '$7']
We're interested in two things: comments and "dollar-something"s
>>> import re
>>> r_comment = re.compile(r'\s*;')
>>> r_dollar = re.compile(r'\$\d+')
Then remove comment lines and find the matching '$' expansions:
>>> [r_dollar.findall(line) for line in sInput.splitlines() if
[, ['$3', '$3', '$3'], , ['$5'], ['$6'], ['$7']]
Finally, roll each line's results into a single list by slightly
>>> sum((r_dollar.findall(line) for line in sInput.splitlines()
if not r_comment.match(line)), )
['$3', '$3', '$3', '$5', '$6', '$7']
Adjust the r_dollar if your variable pattern differs (such as
reverting to your previous r'\$.' pattern if you prefer, or using
r'\$\w+' for multi-character variables).
More information about the Python-list