It is a well-known fact, Jose, that GIGO. The letters "n" and "m" are not interchangeable. Your pattern fails because you have "pn" in one place and "pm" in the other.
>>> s = "pn=jose pn=2017" ... >>> s0 = r0.match(s) >>> s0 <re.Match object; span=(0, 15), match='pn=jose pn=2017'> -----Original Message----- From: Python-list <python-list-bounces+avi.e.gross=gmail....@python.org> On Behalf Of jose isaias cabrera Sent: Thursday, March 2, 2023 8:07 PM To: Mats Wichmann <m...@wichmann.us> Cc: python-list@python.org Subject: Re: Regular Expression bug? On Thu, Mar 2, 2023 at 2:38 PM Mats Wichmann <m...@wichmann.us> wrote: > > On 3/2/23 12:28, Chris Angelico wrote: > > On Fri, 3 Mar 2023 at 06:24, jose isaias cabrera <jic...@gmail.com> wrote: > >> > >> Greetings. > >> > >> For the RegExp Gurus, consider the following python3 code: > >> <code> > >> import re > >> s = "pn=align upgrade sd=2023-02-" > >> ro = re.compile(r"pn=(.+) ") > >> r0=ro.match(s) > >>>>> print(r0.group(1)) > >> align upgrade > >> </code> > >> > >> This is wrong. It should be 'align' because the group only goes up-to > >> the space. Thoughts? Thanks. > >> > > > > Not a bug. Find the longest possible match that fits this; as long as > > you can find a space immediately after it, everything in between goes > > into the .+ part. > > > > If you want to exclude spaces, either use [^ ]+ or .+?. > > https://docs.python.org/3/howto/regex.html#greedy-versus-non-greedy This re is a bit different than the one I am used. So, I am trying to match everything after 'pn=': import re s = "pm=jose pn=2017" m0 = r"pn=(.+)" r0 = re.compile(m0) s0 = r0.match(s) >>> print(s0) None Any help is appreciated. -- https://mail.python.org/mailman/listinfo/python-list -- https://mail.python.org/mailman/listinfo/python-list