Je veux faire correspondre une partie de la chaîne (un mot particulier) et l'imprimer. Exactement ce que fait grep -o
. Mon mot est "chien jaune" par exemple et il peut être trouvé dans une chaîne qui s'étend sur plusieurs lignes.
[34343] | ****. "Example": <one>, yellow dog
tstring0 123
tstring1 456
tstring2 789
Essayons cette expression régulière mydog = re.compile(', .*\n')
puis if mydog.search(string):
imprime uniquement les mots correspondants.
Comment puis-je obtenir uniquement "chien jaune" dans la sortie?
Utilisation d'un groupe de capture et de findall:
>>> import re
>>> s = """[34343] | ****. "Example": <one>, yellow dog
... tstring0 123
... tstring1 456
... tstring2 789"""
>>> mydog = re.compile(', (.*)\n')
>>> mydog.findall(s)
['yellow dog']
Si vous ne voulez que le premier match, alors:
>>> mydog.findall(s)[0]
'yellow dog'
Remarque: vous souhaitez gérer le IndexError
lorsque s
ne contient pas de correspondance.
Si vous ne spécifiez pas de groupe de capture, le texte correspondant à l'expression entière sera contenu avec matchResult.group(0)
. Dans votre cas, ce serait ', yellow dog\n'
. Si vous voulez juste le yellow dow
, Vous devez ajouter un groupe de capture à l'expression: , (.*?)\n
. Notez que j'ai également changé le .*
En un .*?
Afin qu'il ne soit pas gourmand et s'arrête quand il trouve le premier saut de ligne.
>>> s = '''[34343] | ****. "Example": <one>, yellow dog
tstring0 123
tstring1 456
tstring2 789'''
>>> mydog = re.compile(', (.*?)\n')
>>> matchResult = mydog.search(s)
>>> if matchResult:
print(matchResult.group(1))
yellow dog