Chaîne de retour avec tous les non-alphanumériques antislashés; ceci est utile si vous voulez faire correspondre une chaîne littérale arbitraire qui peut contenir des métacaractères d'expression régulière.
Depuis Python 3.7 a re.escape()été modifié pour n'échapper que les caractères significatifs pour les opérations regex.
Dans le modèle de recherche , incluez \ainsi que le ou les caractères que vous recherchez. Vous allez utiliser \pour échapper à vos personnages, vous devez échapper
que aussi bien.
Mettez des parenthèses autour du modèle de recherche , par exemple ([\"]), afin que le
modèle de substitution puisse utiliser le caractère trouvé quand il ajoute \devant lui. (C'est ce que
\1fait: utilise la valeur du premier groupe entre parenthèses.)
Le rdevant r'([\"])'signifie que c'est une chaîne brute . Les chaînes brutes utilisent des règles différentes pour échapper les contre-obliques. Pour écrire ([\"])sous forme de chaîne simple, vous devez doubler toutes les barres obliques inverses et écrire '([\\"])'. Les chaînes brutes sont plus conviviales lorsque vous écrivez des expressions régulières.
Dans la substitution modèle, vous devez échapper \à la distinguer d'une barre oblique inverse qui précède un groupe de substitution, par exemple \1, par conséquent r'\\\1'. Pour écrire
cela sous forme de chaîne simple, vous auriez besoin '\\\\\\1'- et personne ne le veut.
Utilisez repr () [1: -1]. Dans ce cas, les guillemets doubles n'ont pas besoin d'être échappés. La tranche [-1: 1] consiste à supprimer le guillemet simple du début et de la fin.
>>> x = raw_input()
I'm "stuck" :\
>>> print x
I'm "stuck":\
>>>print repr(x)[1:-1]
I\'m "stuck":\\
Ou peut-être voulez-vous simplement échapper une phrase à coller dans votre programme? Si tel est le cas, procédez comme suit:
Cela ne fonctionne pas si la chaîne est unicode, car vous aurez u et devriez exécuterrepr(x)[2:-1]
Antoine Pelisse
En python3.4, où toutes les chaînes sont en Unicode, cela ne semble pas du tout fonctionner, malheureusement. Au lieu de cela, print(repr("I'm stuck")[1:-1])imprime I'm stuck.
dantiston
3
Comme il a été mentionné ci-dessus, la réponse dépend de votre cas. Si vous voulez échapper une chaîne pour une expression régulière, vous devez utiliser re.escape (). Mais si vous souhaitez échapper un ensemble spécifique de caractères, utilisez cette fonction lambda:
>>> escape =lambda s, escapechar, specialchars:"".join(escapechar + c if c in specialchars or c == escapechar else c for c in s)>>> s = raw_input()
I'm "stuck" :\
>>> print s
I'm "stuck":\
>>>print escape(s,"\\",['"'])
I'm \"stuck\" :\\
Réponses:
Utilisation
re.escape
Répétez-le ici:
Depuis Python 3.7 a
re.escape()
été modifié pour n'échapper que les caractères significatifs pour les opérations regex.la source
regex.escape(pattern,string,special_only=True
Je suis surpris que personne n'ait mentionné l'utilisation d'expressions régulières via
re.sub()
:Points importants à noter:
\
ainsi que le ou les caractères que vous recherchez. Vous allez utiliser\
pour échapper à vos personnages, vous devez échapper que aussi bien.([\"])
, afin que le modèle de substitution puisse utiliser le caractère trouvé quand il ajoute\
devant lui. (C'est ce que\1
fait: utilise la valeur du premier groupe entre parenthèses.)r
devantr'([\"])'
signifie que c'est une chaîne brute . Les chaînes brutes utilisent des règles différentes pour échapper les contre-obliques. Pour écrire([\"])
sous forme de chaîne simple, vous devez doubler toutes les barres obliques inverses et écrire'([\\"])'
. Les chaînes brutes sont plus conviviales lorsque vous écrivez des expressions régulières.\
à la distinguer d'une barre oblique inverse qui précède un groupe de substitution, par exemple\1
, par conséquentr'\\\1'
. Pour écrire cela sous forme de chaîne simple, vous auriez besoin'\\\\\\1'
- et personne ne le veut.la source
Utilisez repr () [1: -1]. Dans ce cas, les guillemets doubles n'ont pas besoin d'être échappés. La tranche [-1: 1] consiste à supprimer le guillemet simple du début et de la fin.
Ou peut-être voulez-vous simplement échapper une phrase à coller dans votre programme? Si tel est le cas, procédez comme suit:
la source
repr(x)[2:-1]
print(repr("I'm stuck")[1:-1])
imprimeI'm stuck
.Comme il a été mentionné ci-dessus, la réponse dépend de votre cas. Si vous voulez échapper une chaîne pour une expression régulière, vous devez utiliser re.escape (). Mais si vous souhaitez échapper un ensemble spécifique de caractères, utilisez cette fonction lambda:
la source
Ce n'est pas si dur:
la source
characters
il vaut mieux être le premier!Si vous souhaitez uniquement remplacer certains caractères, vous pouvez utiliser ceci:
la source