On Dec 4, 5:15 pm, eric <[EMAIL PROTECTED]> wrote: > On Dec 4, 4:50 pm, Joe Strout <[EMAIL PROTECTED]> wrote: > > > I have lines in a config file which can end with a comment (delimited > > by # as in Python), but which may also contain string literals > > (delimited by double quotes). A comment delimiter within a string > > literal doesn't count. Is there any easy way to strip off such a > > comment, or do I need to use a loop to find each # and then count the > > quotation marks to its left? > > > Thanks, > > - Joe > > Hi, > > if the string literal you wan't to escape, is not escaped (i.e > contains \" ) then a regexp like > > .*?(?:".*?".*?)*#(?P<comment> .*?)$ > > (not tested) > .*? everything but keep it greedy > ".*?" the string literal not escaped
well it works too import re test ='''this is a test 1 this is a test 2 #with a comment this is a '#gnarlier' test #with a comment this is a "#gnarlier" test #with a comment ''' splitter = re.compile(r'(?m)^(?P<data>.*?(".*?".*?)*)(?:#.*?)?$') def com_strip(text): return [x[0] for x in splitter.findall(test) ] # raw implementation for line in test.split('\n'): print line, '->', re.match(r'(?P<data>.*?(".*?".*?)*)(?:#.*?)?$', line).group("data") # with a function for line in com_strip(test): print line and here is the console output this is a test 1 -> this is a test 1 this is a test 2 #with a comment -> this is a test 2 this is a '#gnarlier' test #with a comment -> this is a ' this is a "#gnarlier" test #with a comment -> this is a "#gnarlier" test -> this is a test 1 this is a test 2 this is a ' this is a "#gnarlier" test -- http://mail.python.org/mailman/listinfo/python-list