Comment utiliser une variable dans une expression régulière?
Je voudrais utiliser un variable
à l'intérieur d'un regex
, comment puis-je faire dans Python
?
TEXTO = sys.argv[1]
if re.search(r"\b(?=\w)TEXTO\b(?!\w)", subject, re.IGNORECASE):
# Successful match
else:
# Match attempt failed
- Vous utilisez la concaténation de chaîne
Vous devez vous connecter pour publier un commentaire.
Vous devez construire la regex comme une chaîne de caractères:
Notez l'utilisation de
re.escape
de sorte que si votre texte contient des caractères spéciaux, ils ne sont pas interprétés comme tels.r'' + foo + 'bar'
?re.escape(foo)
, qui vous doit de toute façon. En fait, je pense quere
interprète ce qu'il est donné comme une chaîne unicode, indépendamment de savoir si vous préfixer
ou pas.Cela permettra d'insérer ce qui est en TEXTO dans la regex comme une chaîne de caractères.
Je trouve qu'il est très pratique pour construire un modèle d'expression régulière par un agencement de plusieurs petits dessins.
De sortie:
Je suis d'accord avec tout ce qui précède, à moins que:
sys.argv[1]
était quelque chose commeChicken\d{2}-\d{2}An\s*important\s*anchor
vous ne voulez pas utiliser
re.escape
car dans ce cas, vous voulez qu'il se comporte comme un regexJ'avais besoin de recherche pour les noms d'utilisateur qui sont semblables les uns aux autres, et ce que Nie Batchelder dit a été incroyablement utile. Cependant, j'ai trouvé que j'avais nettoyeur de sortie lorsque j'ai utilisé de nouveau.compiler pour créer mon terme de recherche:
De sortie peut être imprimé en utilisant les suivantes:
De python 3.6 sur vous pouvez également utiliser Chaîne Littérale De L'Interpolation, "f-chaînes". Dans votre cas particulier, la solution serait:
vous pouvez essayer une autre utilisation l'utilisation de
format
grammaire suger:Vous pouvez utiliser le format de mot-clé pour cela.Format méthode remplacer {} de l'espace réservé à la variable que vous avez passé à la méthode de mise en forme comme un argument.