On 2015-05-19 06:42, massi_...@msn.com wrote: > I succesfully wrote a regex in python in order to substitute all > the occurences in the form $"somechars" with another string. Here > it is: > > re.sub(ur"""(?u)(\$\"[^\"\\]*(?:\\.[^\"\\]*)*\")""", newstring, > string)
The expression is a little more precise than you describe it, but the general idea is correct. For the record, the "(?u)" happens to be unneeded here, and I find it more clear if you pass the re.UNICODE flag to the function. > Now I would need to exclude from the match all the string in the > form $", ", can anyone help me to modufy it? Thanks in advance! If you don't want commas or spaces, you should be able to just insert them into your various negated character-classes: r"""(?u)(\$\"[^\"\\, ]*(?:\\.[^\"\\, ]*)*\")""" Unless you want to allow commas and/or spaces, but disallow commas followed by spaces. That's a lot uglier. If that's the case, it would help to have a test-harness of your expected inputs and results: re_to_test = r"""(?u)(\$\"[^\"\\, ]*(?:\\.[^\"\\, ]*)*\")""" for test, expected in [ ('Hello $"who"!', 'Hello world!'), ('Hello $"who.who"!', 'Hello world!'), ('Hello $"who.is.it"!', 'Hello world!'), ('Hello $"who, what"!', 'Hello world!'), ('Hello $"who,what,where"!', 'Hello world!'), ('Hello $"who, what, where"!', 'Hello $"who, what, where"!'), ('Hello $"who is it"!', 'Hello world!'), ]: result = re.sub(re_to_test, "world", test, re.UNICODE) if result == expected: report_passing(...) else: report_failure(...) -tkc -- https://mail.python.org/mailman/listinfo/python-list