Comment correspondre à un paragraphe en utilisant les regex
J'ai été aux prises avec python regex en essayant de faire correspondre les paragraphes d'un texte, mais je n'ai pas réussi. J'ai besoin d'obtenir les positions début et de fin des paragraphes.
Un exemple de texte:
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
vero eos et accusam et justo duo dolores et ea rebum.
Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet.
Ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet.
Dans ce cas d'exemple, je voudrais séparément correspondre à tous les paragraphes commençant par Lorem, Stet et Ipsum respectivement (sans les lignes vides). Quelqu'un aurait-il une idée de comment faire cela?
Est-il une raison pourquoi vous êtes désireux de le faire avec les regex? Pour quelque chose d'aussi simple que le fractionnement du double-saut de ligne délimitée par les paragraphes que vous pouvez simplement utiliser
Je suis intéressé par le point de début et de fin de positions des paragraphes, pas dans les cordes. Je devrais avoir mentionné que.
paragraph.split('\n\n')
Je suis intéressé par le point de début et de fin de positions des paragraphes, pas dans les cordes. Je devrais avoir mentionné que.
OriginalL'auteur Chiel ten Brinke | 2013-09-02
Vous devez vous connecter pour publier un commentaire.
Vous pouvez diviser sur le double-saut de ligne comme ceci:
Edit: Pour capturer les paragraphes qui correspond, de sorte que vous pouvez obtenir leurs points de début et fin, ce faire:
OriginalL'auteur RichieHindle
À l'aide de split est une façon, vous pouvez le faire avec une expression régulière aussi comme ça:
La
.+?
est un paresseux match, elle correspond à la plus courte chaîne qui rend l'ensemble de la regex de correspondance. Sinon, ce sera simplement de respecter l'ensemble de la chaîne.Donc, fondamentalement, ici, nous voulons trouver une séquence de caractères (
.+?
) qui se termine par une ligne vide (\n\n
) ou à la fin de la chaîne ($
).Le
re.DOTALL
drapeau fait le point pour le match retour à la ligne aussi (nous voulons aussi correspondre à un paragraphe composé de trois lignes sans les lignes vides à l'intérieur)OriginalL'auteur justhalf
Quel est le symbole de saut de ligne? Supposons le symbole de saut de ligne "\r\n', si vous souhaitez faire correspondre les paragraphes commençant par Lorem, vous pouvez le faire comme ceci:
La matchlist va contenir l'ensemble de l'alinéa commencer avec Lorem. Et les deux autres mots sont les mêmes.
Désolé, j'ai fait une erreur. Vous pouvez essayer ceci:
p = re.compile('^Lorem.*\n') matchlist = re.findall(p,s)
Ensuite, vous obtiendrez la liste des paragraphes commencent par LoremOriginalL'auteur Kill Console
Essayer
ou
il suffit de ne pas oublier ajout supplémentaire nouvelle ligne à la fin du texte
OriginalL'auteur Ceyhun Mamedov
j'ai essayé d'utiliser le recommandé RegEx avec la valeur par défaut de Java moteur d'expressions régulières. Cela m'a donné à plusieurs reprises une StackOverflowException, donc au final j'ai réécrit la RegEx et optimisé un peu plus.
Si cela fonctionne bien pour moi en Java:
Cette manie également la fin du document sans nouvelles lignes et tente de concat lignes qui se termine par ':', '-' ou ',' dans le paragraphe suivant.
Et pour éviter que les espaces blancs (espaces ou des tabulations) les pauses décrites ci-dessus fonctionnalité que je suis décapage avant avec la regex suivante:
OriginalL'auteur wobu