Emanuele D'Arrigo wrote:
> Hi everybody,
>
> I'm having a ball with the power of regular expression but I stumbled
> on something I don't quite understand:
>
> theOriginalString = "spam:(?P<first>.*) ham:(?P<second>.*)"
> aReplacementPattern = "\(\?P<first>.*\)"
> aReplacementString= "foo"
> re.sub(aReplacementPattern , aReplacementString, theOriginalString)
>
> results in :
>
> "spam:foo"
>
> instead, I was expecting:
>
> "spam:foo ham:"
>
> Why is that?
>
> Thanks for your help!
>
The quantifiers eg "*" are normally greedy; they try to match as much as
possible. Therefore ".*" matches:

spam:(?P<first>.*) ham:(?P<second>.*)
               ^^^^^^^^^^^^^^^^^^^^^

You could use the lazy form "*?" which tries to match as little as
possible, eg "\(\?P<first>.*?\)" where the ".*?" matches:

spam:(?P<first>.*) ham:(?P<second>.*)
               ^^

giving "spam:foo ham:(?P<second>.*)".
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to