/ Zosúladenie zoznamu s regex - regex

Zosúladenie zoznamu s Regex - regex

Chcem analyzovať nasledujúce vyhlásenie pomocou regexu:

(o) Multi
line
text
(o) Single line text
(o) Single line text

Keď použijem nasledujúci regex, zachytí sa celý text zdroja:

(?<bullet>(o) ) (?<text>.+)

To, čo chcem dosiahnuť, je mať tri zápasy text skupina, tj.

Multi
line
text

a potom dvakrát Single line text.

Ak je riešenie vzhľad / zaostávanie, ako ho použiť na dosiahnutie tohto cieľa?

Vďaka.

odpovede:

2 pre odpoveď č. 1

Môžete použiť lookahead na kontrolu ďalšieho (o) alebo konca vstupu

(?<bullet>(o)) (?<text>.*?)(?=(o)|$)


0 pre odpoveď č. 2

Stačí pridať (o) alebo EOF na konci vášho regex takzničí sa na ďalšej odrážke alebo na konci súboru. Neviem, aký typ regexu používate na to, aby ste získali presný regex, ale myšlienka je, aby to zodpovedalo.

Tu je to, ako zápas EOF v normálnom regex: regex, aby zodpovedal EOF


0 pre odpoveď č. 3

Prečo používať regex vôbec? Zdá sa, že máte dva prípady - čiara začína s guľkou alebo to nie je. Ak sa začína s guľkou, odrežte to a začnite nový textový objekt so zvyškom riadku Ak to nezačína s odrážka, pripojte text k predchádzajúcemu textovému objektu. V pseudokóde:

text = []
i = -1
for line in data:
if line.starts_with("(o)"):
i += 1
text[i] = line[2:]  # all characters in the line after the first three
else:
text[i].append(line)