How to write this repeat matching?
MRAB
python at mrabarnett.plus.com
Sun Jul 6 15:19:43 EDT 2014
On 2014-07-06 19:57, rxjwg98 at gmail.com wrote:
> Hi,
> On Python website, it says that the following match can reach 'abcb' in 6 steps:
>
> .............
> A step-by-step example will make this more obvious. Let's consider the expression
> a[bcd]*b. This matches the letter 'a', zero or more letters from the class [bcd],
> and finally ends with a 'b'. Now imagine matching this RE against the string
> abcbd.
>
> The end of the RE has now been reached, and it has matched abcb. This
> demonstrates how the matching engine goes as far as it can at first, and if no
> match is found it will then progressively back up and retry the rest of the RE
> again and again. It will back up until it has tried zero matches for [bcd]*, and
> if that subsequently fails, the engine will conclude that the string doesn't
> match the RE at all.
> .............
>
> I write the following code:
>
> .......
> import re
>
> line = "abcdb"
>
> matchObj = re.match( 'a[bcd]*b', line)
>
> if matchObj:
> print "matchObj.group() : ", matchObj.group()
> print "matchObj.group(0) : ", matchObj.group()
> print "matchObj.group(1) : ", matchObj.group(1)
> print "matchObj.group(2) : ", matchObj.group(2)
> else:
> print "No match!!"
> .........
>
> In which I have used its match pattern, but the result is not 'abcb'
>
That's because the example has 'abcb', but you have:
line = "abcdb"
(You've put a 'd' in it.)
> Only matchObj.group(0): abcdb
>
> displays. All other group(s) have no content.
>
There are no capture groups in your regex, only group 0 (the entire
matched part).
> How to write this greedy search?
>
More information about the Python-list
mailing list