110 votes

Python regex - préfixe r

Quelqu'un peut-il expliquer pourquoi l'exemple 1 ci-dessous fonctionne, alors que le préfixe r n'est pas utilisé ? Je pensais que le préfixe r doit être utilisé chaque fois que des séquences d'échappement sont utilisées. Exemple 2 et exemple 3 le démontrent.

# example 1
import re
print (re.sub('\s+', ' ', 'hello     there      there'))
# prints 'hello there there' - not expected as r prefix is not used

# example 2
import re
print (re.sub(r'(\b\w+)(\s+\1\b)+', r'\1', 'hello     there      there'))
# prints 'hello     there' - as expected as r prefix is used

# example 3
import re
print (re.sub('(\b\w+)(\s+\1\b)+', '\1', 'hello     there      there'))
# prints 'hello     there      there' - as expected as r prefix is not used

6voto

Thomas Wouters Points 38811

Toutes les séquences impliquant des antislashs ne sont pas des séquences d'échappement. \t \f le sont, par exemple, mais \s ne l'est pas. Dans une chaîne non tirée littéralement, tout \ qui ne fait pas partie d'une séquence d'échappement est vu comme un autre \ :

>>> "\s"
'\\s'
>>> "\t"
'\t'

\b est une séquence d'échappement, cependant, l'exemple 3 échoue. (Et oui, certaines personnes considèrent ce comportement plutôt malheureux.)

1voto

user2856064 Points 185

Essayez ça :

a = '\''
'
a = r'\''
\'
a = "\'"
'
a = r"\'"
\'

1voto

Ugur Umut Points 11

Cochez l'exemple ci-dessous :

print r"123\n123" 
#outputs>>>
123\n123


print "123\n123"
#outputs>>>
123
123

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X