2
votes

Python Regex: supprimer les caractères facultatifs

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.


1 commentaires

utilisez (\ d +) pour obtenir le numéro


5 Réponses :


0
votes

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


0 commentaires

0
votes

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)


0 commentaires

2
votes

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)


0 commentaires

2
votes

Vous pouvez simplement utiliser re.sub avec le motif \ D (= pas un nombre):

>>> import re
>>> string = 'a2017a12a'
>>> re.sub(r'\D', '', string)
'201712'


0 commentaires

0
votes

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.

https://docs.python.org/3/library/re.html a>


0 commentaires