Je sais qu'il existe des messages similaires pour obtenir le texte entre deux chaînes, mais je n'ai pas pu comprendre ce qui ne va pas avec mon code même après plusieurs essais, j'ai donc décidé de poster une question. Les données de texte sur lesquelles j'essaie d'utiliser regex se présentent comme suit :

* * *

  

level a20. heading1 random

  

paragraph 1
paragraph 2


paragraph 3
  

* * *

paragraph 4

paragraph 5

* * *

  

level b22. random-heading2

  

someparagraphs...

Je vise à obtenir tout le texte entre le niveau a20. rubrique1 aléatoire jusqu'au * * * niveau b22. titre aléatoire2. J'ai pu trouver le début du texte en utilisant

regex = r"^\* \* \*[ \t\n\r\f]+level \S+ heading random"

Mais lorsque j'essaie d'ajouter le reste de l'expression régulière, le code ne parvient pas à saisir le texte

regex_full = r"^\* \* \*[ \t\n\r\f]+level \S+ heading random(.*?)\* \* \*[ \t\n\r\f]+level \S+ [a-z]+"
re.finditer(regex_full, above_text_data, re.MULTILINE | re.DOTALL)

Parce que je suis sûr de 'heading random' mais dans différents documents, l'autre titre ('random-heading2') change, il pourrait même s'agir d'un mot ou de deux œuvres. Quelqu'un peut-il mettre en évidence l'erreur avec l'expression regex_full pour obtenir tout le texte entre le niveau a20. rubrique1 aléatoire jusqu'au * * * niveau b22. titre aléatoire2 ? Sur regex101.com, l'erreur est "Votre expression régulière ne correspond pas à la chaîne d'objet".

* * *

  

level a20. heading1 random


TEXT OF INTEREST
* * *
  

level b22. random-heading2
1
Freak 31 oct. 2020 à 00:47

1 réponse

Meilleure réponse

Peut être ça

r"\* \* \*\s*level a20\. heading1 random\s*(.*?)\s*\* \* \*\s*level b22\. random-heading2"

Le groupe de capture 1 contient du contenu découpé.

3
user13843220user13843220 30 oct. 2020 à 22:15