[Tutor] Question on regular expressions

Mark Lawrence breamoreboy at yahoo.co.uk
Tue Feb 12 22:55:42 CET 2013


On 12/02/2013 17:43, Marcin Mleczko wrote:
> Hello,
>
> given this kind of string:
>
> "start SomeArbitraryAmountOfText start AnotherArbitraryAmountOfText end"
>
> a search string like: r"start.*?end" would give me the entire string
> from the first "start" to "end" : "start SomeArbitraryAmountOfText start
> AnotherArbitraryAmountOfText end"
>
> but I am interested only in the second part between the 2nd "start" and
> the "end": "start AnotherArbitraryAmountOfText end"
>
> What would be best, most clever way to search for that?
>
> Or even more general: how do I exlude always the text between the last
> "start" and the "end" tag assuming the entire text contains several
> "start" tags spaced by an arbitrary amount of text befor the "end" tag?
>
> Any ideas?
>
> Thank you in advance. ;-)
>
> Marcin
>

IMHO the best way is to use the rindex method to grab what you're after. 
  I don't do clever, it makes code too difficult to maintain.  So how about.

 >>> a="start SomeArbitraryAmountOfText start 
AnotherArbitraryAmountOfText end"
 >>> b="start "
 >>> x=a.rindex(b)
 >>> y=a.rindex(' end')
 >>> a[x+len(b):y]
'AnotherArbitraryAmountOfText'
 >>> c="garbage in, garbage out"
 >>> x=c.rindex(b)
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
ValueError: substring not found
 >>>

-- 
Cheers.

Mark Lawrence



More information about the Tutor mailing list