J'ai un modèle d'expression régulière avec des caractères optionnels, mais à la sortie, je souhaite supprimer ces caractères optionnels. Exemple:
desired output = '201712'
Je peux avoir une correspondance comme celle-ci, mais ce que je veux en sortie est:
string = 'a2017a12a'
pattern = re.compile("((20[0-9]{2})(.?)(0[1-9]|1[0-2]))")
result = pattern.search(string)
print(result)
Merci.
5 Réponses :
Essayez celui-ci:
201712
Résultat:
import re
string = 'a2017a12a'
pattern = re.findall("(\d+)", string) # this regex will capture only digit
print("".join(p for p in pattern)) # combine all digits
Si vous souhaitez supprimer tous les caractères de la chaîne, vous pouvez le faire
'201712'
Sortie:
import re
string = 'a2017a12a'
re.sub('[A-Za-z]+','',string)
Vous avez déjà capturé les données prévues dans des groupes et vous pouvez maintenant utiliser re.sub pour remplacer la correspondance entière par uniquement le contenu de group1 et group2.
Essayez votre code Python modifié,
201712
Remarquez comment j'ai ajouté . * autour du motif, de sorte que tous les caractères supplémentaires autour de vos données sont mis en correspondance et sont supprimés. En outre, supprimez les parenthèses supplémentaires qui n'étaient pas nécessaires. Cela fonctionnera également avec des chaînes où vous pouvez avoir d'autres chiffres entourant ce texte comme ceci hello123 a2017a12a quelques 99 autres nombres
Sortie,
import re
string = 'a2017a12a'
pattern = re.compile(".*(20[0-9]{2}).?(0[1-9]|1[0-2]).*")
result = re.sub(pattern, r'\1\2', string)
print(result)
Vous pouvez simplement utiliser re.sub avec le motif \ D (= pas un nombre):
>>> import re >>> string = 'a2017a12a' >>> re.sub(r'\D', '', string) '201712'
Vous pouvez utiliser la méthode re module pour obtenir la sortie requise, comme:
import re
#method 1
string = 'a2017a12a'
print (re.sub(r'\D', '', string))
#method 2
pattern = re.findall("(\d+)", string)
print("".join(p for p in pattern))
Vous pouvez également vous référer au document ci-dessous pour plus d'informations.
utilisez
(\ d +)pour obtenir le numéro