Je voudrais utiliser une expression régulière qui correspond à n'importe quel texte entre deux chaînes:
DATE POSTED: MAY 30, 2018, some text here, Garcia Answer 1: more text, DATE POSTED: MARCH 8, 2017, some text here, Smith Answer 2: more text, DATE POSTED: JUNE 17, 2018, some text here, Jones Answer 1: more text...
Dans cet exemple, je voudrais rechercher le DATE POSTED: [* date *], et , [* Name *] Répondez à [* number *]: et saisissez tout ce qui se trouve entre les deux.
En d'autres termes, j'aimerais trouver tout du texte ici
J'utilise Python 3x.
3 Réponses :
import re
t = "DATE POSTED: MAY 30, 2018, some text here, Garcia Answer 1: more text, DATE POSTED: MARCH 8, 2017, some text here, Smith Answer 2: more text, DATE POSTED: JUNE 17, 2018, some text here, Jones Answer 1: more text..."
out = re.split("Answer [0-9]{1}",t)
out = [",".join(x.split(",")[0:-1]) for x in out]
out = [re.split("[0-9]{4},",x) for x in out]
out = [x[-1] for x in out]
print(out)
will print everything out as a list
Merci pour la réponse. Les exemples que j'ai postés plus tôt font en fait partie de la même chaîne (voir modifier)
Voici comment:
['some text here']
Sortie:
import re s = "DATE POSTED: MAY 17, 2018, some text here, Garcia Answer 1: more text" print(re.findall(r'(?<=DATE POSTED: MAY 17, 2018, )(.*)(?=, Garcia Answer 1)',s))
Merci pour la réponse. Mais votre solution ne fonctionne que pour 1 exemple très spécifique. Existe-t-il un moyen d'extraire tout le "texte ici"?
Vous pouvez essayer:
import re
regex = r"DATE POSTED: .*?, \d{4}, (.*?),"
test_str = "DATE POSTED: MAY 30, 2018, some text here1, Garcia Answer 1: more text, DATE POSTED: MARCH 8, 2017, some text here2, Smith Answer 2: more text, DATE POSTED: JUNE 17, 2018, some text here3, Jones Answer 1: more text..."
matches = re.findall(regex, test_str)
print(matches)
# For making a difference between strings I used "some text here1, 2 and 3".
# output: matches = ['some text here1', 'some text here2', 'some text here3']
Explication de l'expression régulière ci-dessus:
DATE POSTED:. * ?, - Correspond à
DATE POSTED:littéralement avec tout ce qui suit avant le premier, . C'est la raison pour laquelle j'ai utilisé la correspondance différée, c'est-à-dire. *?.\ d {4}, - Correspond à la partie année, c'est-à-dire que
\ d {4}représente 4 chiffres de l'année avant un,.(. *?), - Représente un groupe de capture correspondant à tout ce qui suit paresseusement avant le premier
, code > caractère.
Vous pouvez trouver la démo de l'expression régulière ci-dessus dans ici. strong>
Implémentation en python:
DATE POSTED: .*?, \d{4}, (.*?),
cela aide-t-il?
Depuis, vous êtes un nouveau contributeur; il se peut donc que vous n'ayez pas lu la documentation sur la façon d'accepter une réponse. Si une réponse vous aide, pensez à l'accepter en cochant la case en dessous. Il est utile tant pour le répondeur que pour la communauté puisque les futurs lecteurs bénéficient des publications. Même si; il n'est pas pressé d'accepter une réponse. Prenez votre temps pour trouver la réponse qui vous convient le mieux mais assurez-vous de l'accepter après avoir trouvé la réponse qui vous convient le mieux. Pour de meilleures informations, veuillez lire stackoverflow.com/help/someone-answers
Veuillez reconnaître si vous avez besoin d'autre chose dans les réponses?