Python regulære udtryk tildeling til navngivne grupper

Når du bruger variabler (er det det rigtige ord?) i python regulære udtryk som disse: “blah (?P\w+)” (“værdi” ville være den variabel), hvordan kunne du gøre variablens værdi være den tekst efter “blah” til slutningen af den linje, eller at en bestemt karakter ikke betale nogen opmærksomhed til det faktiske indhold af den variable. For eksempel, det er pseudo-kode for hvad jeg ønsker:

>>> import re
>>> p = re.compile("say (?P<value>continue_until_text_after_assignment_is_recognized) endsay")
>>> m = p.match("say Hello hi yo endsay")
>>> m.group('value')
'Hello hi yo'

Bemærk: titlen er formentlig ikke forståeligt. Det er, fordi jeg ikke vidste, hvordan man siger det. Undskyld hvis jeg forårsagede nogen forvirring.

Jeg rettede op din titel en smule, men jeg tror, det var klart fra dit kode eksempel, hvad du ønskede (i det mindste jeg håber, at jeg tolker det rigtigt).
FYI, de ting mellem parenteserne kaldes en “gruppe”. I dit eksempel ‘værdi’ er et navn. Så, du matcher en “navngivet gruppe”.

OriginalForfatteren None | 2010-04-26

2 svar

  1. 12

    For, at du gerne vil have et regulært udtryk af

    "say (?P<value>.+) endsay"

    Den periode, der matcher alle tegn, og plus-tegn angiver, at der skal gentages en eller flere gange… så .+, forstås enhver sekvens af et eller flere tegn. Når du lægger endsay i slutningen, er det regulære udtryk motor vil sørge for, at uanset hvad, det passer rent faktisk ende med at strengen.

    Fungerede perfekt! Tak skal du have.

    OriginalForfatteren David Z

  2. 10

    Skal du angive, hvad du ønsker at matche, hvis tekst er, for eksempel,

    say hello there and endsay but some more endsay

    Hvis du ønsker at matche hele hello there and endsay but some more substring, @David ‘ s svar er korrekt. Ellers, så de passer lige hello there and, mønstret skal være:

    say (?P<value>.+?) endsay

    med et spørgsmålstegn efter plus-tegnet for at gøre det ikke-grådige (som standard er det grådige, æder alt, hvad det eventuelt kan samtidig muliggøre en samlet kamp; ikke-grådige betyder, at det gobbles som lidt som muligt, igen samtidig giver en samlet kamp).

    Jeg har tænkt over det, men har givet OP er tale om matchende til slutningen af linjen, det virkede som en grådig operatør ville være passende. Stadig, +1.

    OriginalForfatteren Alex Martelli

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *