Regex in Python to grab all text before special character

Question:

Here is a portion of my text:

text="Q.  1  Incontournable  Cercle 1  _  30 - Gestion Actif / Passif   nQuel est le dispositif de limites de l’établissement ? Quels indicateurs sont retenus ? Sont-ils npertinents ? a-t-il été validé par le Comité des risques ? Quelle est la fréquence de revue des nindicateurs et des limites associées ? (revue a minima annuelle prévue par l’article 224 de l’arrêté ndu 3 novembre 2014) ? n    Cliquez ici pour taper du texte. n n n n  Q.  2       _    ☐ nCe dispositif respecte-t-il les normes du Groupe BPCE ? n   n  Q.  3  Incontournable  Cercle 1  _  30 - Gestion Actif / Passif   nQuel dispositif se déclenche en cas de dépassements des limites ? L’établissement informe-t-il la nDRCCP, conformément au Référentiel des Risques de marché Groupe, du plan d’action mis en place nafin de revenir dans les limites ? L'information a-telle été remontée au comité des risques et d'audit nde l'établissement ? n    Contrôle & Test  nS’assurer de l’existence de procédures de gestion des dépassements de limite incluant nnotamment les alertes et les plans de retour dans les limites. Vérifier que ce dispositif est ndocumenté, présenté au Comité des Risques de l’établissement et communiqué à la nDirection des Risques locale ainsi qu’à la DRCCP BPCE. n n  Q.  4       _ "

I would like to grab all the pieces that begins with "Q. {digit} Incontournable" and finish by "Q.".
I tried:

(Q.W*d{1,2}W*Incontournable)([^(Q.)]*)

I wanted to tell: ‘take all the character which are different of the couple "Q." ‘(I escape the dot since it is a special character), but it doesn’t work. Have you any idea? Thanks

Asked By: amous

||

Answers:

Its hard, because even with lookahead assertion you miss out on the middle question: See https://regex101.com/r/1OvwOm/1

Why dont you use string.split("Q.") and append the Q. back to the splits?

text="Q.  1  Incontournable  Cercle 1  _  30 - Gestion Actif / Passif   nQuel est le dispositif de limites de l’établissement ? Quels indicateurs sont retenus ? Sont-ils npertinents ? a-t-il été validé par le Comité des risques ? Quelle est la fréquence de revue des nindicateurs et des limites associées ? (revue a minima annuelle prévue par l’article 224 de l’arrêté ndu 3 novembre 2014) ? n    Cliquez ici pour taper du texte. n n n n  Q.  2       _    ☐ nCe dispositif respecte-t-il les normes du Groupe BPCE ? n   n  Q.  3  Incontournable  Cercle 1  _  30 - Gestion Actif / Passif   nQuel dispositif se déclenche en cas de dépassements des limites ? L’établissement informe-t-il la nDRCCP, conformément au Référentiel des Risques de marché Groupe, du plan d’action mis en place nafin de revenir dans les limites ? L'information a-telle été remontée au comité des risques et d'audit nde l'établissement ? n    Contrôle & Test  nS’assurer de l’existence de procédures de gestion des dépassements de limite incluant nnotamment les alertes et les plans de retour dans les limites. Vérifier que ce dispositif est ndocumenté, présenté au Comité des Risques de l’établissement et communiqué à la nDirection des Risques locale ainsi qu’à la DRCCP BPCE. n n  Q.  4       _ "

split = ["Q."+t for t in text.split("Q.")]

print(*split,sep="n--------------n")

Output:

Q.
--------------
Q.  1  Incontournable  Cercle 1  _  30 - Gestion Actif / Passif
Quel est le dispositif de limites de l’établissement ? Quels indicateurs sont retenus ? Sont-ils
pertinents ? a-t-il été validé par le Comité des risques ? Quelle est la fréquence de revue des
indicateurs et des limites associées ? (revue a minima annuelle prévue par l’article 224 de l’arrêté
du 3 novembre 2014) ?
    Cliquez ici pour taper du texte.




--------------
Q.  2       _    ☐
Ce dispositif respecte-t-il les normes du Groupe BPCE ?


--------------
Q.  3  Incontournable  Cercle 1  _  30 - Gestion Actif / Passif
Quel dispositif se déclenche en cas de dépassements des limites ? L’établissement informe-t-il la
DRCCP, conformément au Référentiel des Risques de marché Groupe, du plan d’action mis en place
afin de revenir dans les limites ? L'information a-telle été remontée au comité des risques et d'audit
de l'établissement ?
    Contrôle & Test
S’assurer de l’existence de procédures de gestion des dépassements de limite incluant
notamment les alertes et les plans de retour dans les limites. Vérifier que ce dispositif est
documenté, présenté au Comité des Risques de l’établissement et communiqué à la
Direction des Risques locale ainsi qu’à la DRCCP BPCE.


--------------
Q.  4       _ 
Answered By: Patrick Artner

You can use regex with a lookahead pattern like this:

import re
re.findall(r'(bQ.s*d+s*Incontournableb)s*(.*?)(?=bQ.s*d+s*Incontournableb|$)', text, flags=re.DOTALL)

This returns:

[('Q.  1  Incontournable', 'Cercle 1  _  30 - Gestion Actif / Passif   nQuel est le dispositif de limites de l’établissement ? Quels indicateurs sont retenus ? Sont-ils npertinents ? a-t-il été validé par le Comité des risques ? Quelle est la fréquence de revue des nindicateurs et des limites associées ? (revue a minima annuelle prévue par l’article 224 de l’arrêté ndu 3 novembre 2014) ? n    Cliquez ici pour taper du texte. n n n n  Q.  2       _    ☐ nCe dispositif respecte-t-il les normes du Groupe BPCE ? n   n  '),
('Q.  3  Incontournable', "Cercle 1  _  30 - Gestion Actif / Passif   nQuel dispositif se déclenche en cas de dépassements des limites ? L’établissement informe-t-il la nDRCCP, conformément au Référentiel des Risques de marché Groupe, du plan d’action mis en place nafin de revenir dans les limites ? L'information a-telle été remontée au comité des risques et d'audit nde l'établissement ? n    Contrôle & Test  nS’assurer de l’existence de procédures de gestion des dépassements de limite incluant nnotamment les alertes et les plans de retour dans les limites. Vérifier que ce dispositif est ndocumenté, présenté au Comité des Risques de l’établissement et communiqué à la nDirection des Risques locale ainsi qu’à la DRCCP BPCE. n n  Q.  4       _ ")]

or if you would rather capture all questions and not limit it to those starting with “Incontournable”, you can match non-newline characters instead as your question:

re.findall(r'(bQ.s*d+b[^n]*)s*(.*?)(?=bQ.s*d+b|$)', text, flags=re.DOTALL)

This returns:

[('Q.  1  Incontournable  Cercle 1  _  30 - Gestion Actif / Passif   ', 'Quel est le dispositif de limites de l’établissement ? Quels indicateurs sont retenus ? Sont-ils npertinents ? a-t-il été validé par le Comité des risques ? Quelle est la fréquence de revue des nindicateurs et des limites associées ? (revue a minima annuelle prévue par l’article 224 de l’arrêté ndu 3 novembre 2014) ? n    Cliquez ici pour taper du texte. n n n n  '),
('Q.  2       _    ☐ ', 'Ce dispositif respecte-t-il les normes du Groupe BPCE ? n   n  '),
('Q.  3  Incontournable  Cercle 1  _  30 - Gestion Actif / Passif   ', "Quel dispositif se déclenche en cas de dépassements des limites ? L’établissement informe-t-il la nDRCCP, conformément au Référentiel des Risques de marché Groupe, du plan d’action mis en place nafin de revenir dans les limites ? L'information a-telle été remontée au comité des risques et d'audit nde l'établissement ? n    Contrôle & Test  nS’assurer de l’existence de procédures de gestion des dépassements de limite incluant nnotamment les alertes et les plans de retour dans les limites. Vérifier que ce dispositif est ndocumenté, présenté au Comité des Risques de l’établissement et communiqué à la nDirection des Risques locale ainsi qu’à la DRCCP BPCE. n n  "),
('Q.  4       _ ', '')]
Answered By: blhsing
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.