/ / Relacionar la lista con Regex - regex

Coincidencia de la lista con Regex - regex

Quiero analizar la siguiente declaración usando expresiones regulares:

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

Cuando uso la siguiente expresión regular, se captura todo el texto de la fuente:

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

Lo que quiero lograr es tener tres partidos de text grupo, es decir.

Multi
line
text

y luego dos veces Single line text.

Si la solución es lookahead / behind, ¿cómo usarla para lograr esto?

Gracias.

Respuestas

2 para la respuesta № 1

Puede usar Lookahead para verificar la siguiente (o) o el final de la entrada

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


0 para la respuesta № 2

Solo agregue una (o) o EOF al final de su expresión regular parase cortará en la siguiente viñeta o al final del archivo. No sé qué tipo de expresión regular estás usando para darte la expresión exacta, pero la idea es que coincida con eso.

Aquí es cómo hacer coincidir EOF en regex normal: expresiones regulares para emparejar EOF


0 para la respuesta № 3

¿Por qué usar una expresión regular en absoluto? Parece que tienes dos casos: una línea comienza con una viñeta o no. Si se inicia con una viñeta, córtala y comienza un nuevo objeto de texto con el resto de la línea. Si no comienza con una viñeta, agregue ese texto al objeto de texto anterior. En pseudocódigo:

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)