Dénote une chaîne:
re.search('(?<=This)(.*?)(?=\n)', string)
Je veux extraire les trois premières phrases, c'est-à-dire
This is the first sentence.\nIt is the second one.\nNow, this is the third one.
Apparemment, le régulier suivant L'expression ne fonctionne pas:
string = 'Other unwanted text here and start here: This is the first sentence.\nIt is the second one.\nNow, this is the third one.\nThis is not I want.\n'
Quelle est l'expression correcte pour extraire du texte entre This et le troisième \ n ?
Merci .
4 Réponses :
Jerry a raison, regex n'est pas le bon outil pour le travail et il existe des moyens beaucoup plus simples et plus efficaces de résoudre le problème;
This is the first sentence. It is the second one. Now, this is the third one.
SORTIE:
this = 'This is the first sentence.\nIt is the second one.\nNow, this is the third one.\nThis is not I want.\n'
print('\n'.join(this.split('\n', 3)[:-1]))
Si vous voulez simplement vous entraîner à utiliser les regex, suivre un tutoriel serait beaucoup plus facile.
Vous pouvez utiliser cette expression régulière pour capturer trois phrases commençant par Ce texte,
This is the first sentence. It is the second one. Now, this is the third one.
Code Python,
import re
s = 'Other unwanted text here and start here: This is the first sentence.\nIt is the second one.\nNow, this is the third one.\nThis is not I want.\n'
m = re.search(r'This(?:[^\n]*\n){3}',s)
if (m):
print(m.group())
Impressions,
This(?:[^\n]*\n){3}
Comment extraire du texte entre This et le troisième \ n ?
J'ai essayé re.search ('(? <= This) ((?: [^ \ N] * \ n) {3})', string) mais il renvoie None code>.
J'ai également créé une démo: repl.it/repls/OvercookedAdventurousDownload . Vérifiez s'il vous plaît.
Merci beaucoup, Pushpesh. Mais comment inclure This dans le résultat?
@Chan: Pour inclure This lui-même aussi dans la correspondance, changez le regard positif derrière en littéral This et utilisez cette expression régulière This (?: [^ \ N] * \ n) {3} . Vérifiez votre démo modifiée
Heureux de pouvoir vous aider @Chan :)
Essayez ce qui suit:
is the first sentence. It is the second one. Now, this is the third one.
Vous donnant:
import re string = 'Other unwanted text here and start here: This is the first sentence.\nIt is the second one.\nNow, this is the third one.\nThis is not I want.\n' extracted_text = re.search(r'This(.*?\n.*?\n.*?)\n', string).group(1) print(extracted_text)
Cela suppose qu'il manquait un n avant Now . Si vous souhaitez conserver This , vous pouvez le déplacer dans le (
Comment extraire du texte entre This et le troisième \ n ?
.match () renverra un objet de correspondance, puis .group () vous donnera le texte correspondant.
Désolé pour la question peu claire. Veuillez consulter la question modifiée. Je veux le texte entre This et le troisième \ n et This est le premier mot de la phrase.
J'ai essayé vos suggestions, mais j'ai échoué. Veuillez consulter repl.it/@Chan2019/OvercookedAdventurousDownload
Il n'était pas clair si vous vouliez réellement \ n littéralement ou comme nouvelle ligne. J'ai mis à jour la solution.
(?s)(This.*?)(?=\nThis)
Faites le . inclure une nouvelle ligne avec (? s) , recherchez une séquence commençant par This et suivie de \nThis.
N'oubliez pas que __repr __ code > du résultat de la recherche n'imprime pas toute la chaîne correspondante, vous devrez donc
print(re.search('(?s)(This.*?)(?=\nThis)', string)[0])
Ma sortie pour Autre texte indésirable ici et commencez ici: Ceci est la première phrase. \ NC'est la deuxième. \ Maintenant, c'est la troisième. \ NCe n'est pas ce que je veux. \ N : Ceci est la première phrase. \ nC'est la deuxième. \ nMaintenant, voici la troisième. N'est-ce pas ce que vous voulez?
J'ai essayé print (re.search ('(? S) (This. *?) (? = \ NThis)', string) [0]) et j'ai obtenu TypeError: 'NoneType 'objet n'est pas indexable .
Cela peut être dû au fait que vous attribuez une chaîne comme celle-ci string = r'blah ' et pas comme celle-ci string =' blah ' La première est pour les chaînes de regex. Vous en avez besoin d'un régulier.
Je pense que vous vouliez avoir
\ nMaintenant ...au lieu de\ Now. Je pense aussi que vous pourriez vous séparer sur\ npour le rendre plus simple (et rejoindre les 3 premiers éléments du fractionnement en utilisant\ n)Merci, Jerry. Mais je veux savoir comment le résoudre en utilisant regex.
Avez-vous des raisons pour lesquelles vous voulez faire cela? Pourquoi voulez-vous utiliser un outil que vous ne savez pas utiliser, surtout quand il existe des solutions plus efficaces pour résoudre ce problème particulier?