On Wed, 20 Feb 2008 11:36:20 -0800, Amit Gupta wrote: > Before I read the message: I screwed up. > > Let me write again > >>> x = re.compile("CL(?P<name1>[a-z]+)") > # group name "name1" is attached to the match of lowercase string of > alphabet > # Now I have a dictionary saying {"name1", "iamgood"} > # I would like a function, that takes x and my dictionary and > return "CLiamgood" > # If my dictionary instead have {"name1", "123"}, it gives error on > processingit > # > # In general, I have reg-expression where every non-trivial match has a > group-name. I want to do the reverse of reg-exp match. The function can > take reg-exp and replace the group-matches from dictionary > # I hope, this make it clear.
Clear as mud. But I'm going to take a guess. Are you trying to validate the data against the regular expression as well as substitute values? That means your function needs to do something like this: (1) Take the regular expression object, and extract the string it was made from. That way at least you know the regular expression was valid. x = re.compile("CL(?P<name1>[a-z]+)") # validate the regex x.pattern() => "CL(?P<name1>[a-z]+)" (2) Split the string into sets of three pieces: split("CL(?P<name1>[a-z]+)") # you need to write this function => ("CL", "(?P<name1>", "[a-z]+)") (3) Mangle the first two pieces: mangle("CL", "(?P<name1>") # you need to write this function => "CL%(name1)s" (4) Validate the value in the dictionary: d = {"name1", "123"} validate("[a-z]+)", d) => raise exception d = {"name1", "iamgood"} validate("[a-z]+)", d) => return True (5) If the validation step succeeded, then do the replacement: "CL%(name1)s" % d => "CLiamgood" Step (2), the splitter, will be the hardest because you essentially need to parse the regular expression. You will need to decide how to handle regexes with multiple "bits", including *nested* expressions, e.g.: "CL(?P<name1>[a-z]+)XY(?:AB)[aeiou]+(?P<name2>CD(?P<name3>..)\?EF)" Good luck. -- Steven -- http://mail.python.org/mailman/listinfo/python-list