> "parameter=12ab" > "parameter=12ab foo bar" > "parameter='12ab'" > "parameter='12ab' biz boz" > "parameter="12ab"" > "parameter="12ab" junk" > > in each case returning 12ab as a match. "parameter" is known and fixed. > The parameter value may or may not be enclosed in single or double > quotes, and may or may not be the last thing on the line. If the value > is quoted, it may contain spaces. > > I've tried a regex of the form: > re.compile(r'parameter=(["\']?(.*?)\1( *|$)')
Below is a test-harness that seemed to spit out the results you want (I threw in some bogus tests to make sure they failed too) with the given value for "exp". The resulting match object will have your desired value in group(1)...though it will include whatever quotes happened to be in it. You may also need to anchor accordingly with "^" and "$" It doesn't gracefully handle escaped quotes in your value -tim import re tests = [ ('parameter=12ab', True), ('parameter=12ab foo bar', True), ("parameter='12ab'", True), ("parameter='12ab' biz boz", True), ('parameter="12ab"', True), ('parameter="12ab" junk', True), ('parameter="12ab', False), ('parameter=\'12ab', False), ('parameter="12ab\'', False), ('parameter="12ab\' foo baz', False) ] exp = r'parameter=((["\'])(.*?)\2|[^\'" ]+).*' r = re.compile(exp) print "Using regexp: %s" % exp for test,expectedResult in tests: if r.match(test): result = True else: result = False if result == expectedResult: print "[%s] passed" % test else: print "[%s] failed (expected %s, got %s)" % (test, expectedResult, result) -- http://mail.python.org/mailman/listinfo/python-list