2017-10-04 3 views
0

Ma question est d'extraire un certain paragraphe (par exemple, généralement un paragraphe du milieu) d'un fichier à travers la regex en Python.Comment extraire un certain paragraphe d'un fichier, utilisez regex en python?

Un exemple de fichier est comme suit:

poem = """The time will come 
when, with elation, 
you will greet yourself arriving 
at your own door, in your own mirror, 
and each will smile at the other's welcome, 
and say, sit here. Eat. 
You will love again the stranger who was your self. 
Give wine. Give bread. Give back your heart 
to itself, to the stranger who has loved you 

all your life, whom you ignored 
for another, who knows you by heart. 
Take down the love letters from the bookshelf, 

the photographs, the desperate notes, 
peel your own image from the mirror. 
Sit. Feast on your life.""" 

Comment extraire le deuxième alinéa (ce qui signifie « tout ce que vous la vie ... l'étagère ») de cette utilisation poème regex en python?

+1

Qu'avez-vous essayé jusqu'à présent? –

+0

Capturez tout ce qui se trouve entre '\ n \ n'. –

+0

Je me bats avec le modèle du deuxième paragraphe en ce moment. BESOIN D'AIDE POUR! – hoperose

Répondre

0

utilisez la capture du groupe et essayer ceci:

import re 


pattern=r'^(all.*bookshelf[,\s])' 

second=re.search(pattern,poem,re.MULTILINE | re.DOTALL) 
print(second.group(0)) 
0

Utilisez un look-ahead positif et regarder en arrière:

(?<=\n\n).+(?=\n\n) 

Le (?<=\n\n) au début il y a un coup d'oeil-derrière. Il ne fait correspondre les choses après s'il y a \n\n derrière.

Le dernier bit (?=\n\n) est un aperçu, qui ne correspond à la chose précédente que s'il y a \n\n après.

Essayez-: https://regex101.com/r/7XnDjS/1

+0

Merci pour votre aide. J'ai ajouté votre code comme ceci: paragraph = re.match (r '(? <= \ N \ n). + (? = \ N \ n)', poème) impression (paragraphe). Cependant, le résultat est "None" dans le shell. – hoperose

+0

@hoperose Vous devez utiliser 'search' au lieu de' match'. Appelez également 'group (0)' sur la valeur de retour pour obtenir la chaîne correspondante. – Sweeper

+0

comme ceci: paragraph = re.search (r '(? <= \ N \ n). + (? = \ N \ n)', poème) print (paragraph.group (0))? – hoperose

0

Il peut être important que certains fichiers de texte de Windows mettre fin à une ligne avec \ r \ n au lieu de simplement \ n. Python a une excellente documentation sur les expressions régulières. Juste google "python regexp". Vous pourriez même google "perl regexp" puisque Python a copié regexp de Perl ;-) Une manière d'obtenir juste le texte du second paragraphe serait d'utiliser() pour saisir le texte entre deux groupes de deux ou plusieurs fins de ligne comme ceci:

myPattern = re.compile('[^\r\n]+\r?\n\r?\n+([^\r\n]+)\r?\n\r?\n.*') 

puis l'utiliser comme ceci:

secondPara = myPattern.sub("\\1", content) 

Voici mon script dans l'action:

[email protected] 137> ./poem2.py 
secondPara: all your life, whom you ignored for another, who knows you by heart. Take down the love letters from the bookshelf, 
+0

Merci @ Ken Schumack. Néanmoins, les résultats en cours redonnent tout le contenu. Je ne sais pas pourquoi – hoperose