Je me demandais quelle était la meilleure façon de faire correspondre "test.this"
de "blah blah blah test.this@gmail.com blah blah"
est ? Utilisation de Python.
J'ai essayé re.split(r"\b\w.\w@")
Je me demandais quelle était la meilleure façon de faire correspondre "test.this"
de "blah blah blah test.this@gmail.com blah blah"
est ? Utilisation de Python.
J'ai essayé re.split(r"\b\w.\w@")
Dans votre regex, vous devez s'échapper le point "\."
ou l'utiliser à l'intérieur d'un classe de caractères "[.]"
car il s'agit d'un méta-caractère dans les regex, qui correspond à n'importe quel caractère.
Aussi, vous avez besoin \w+
au lieu de \w
pour faire correspondre un ou plusieurs caractères de mot.
Maintenant, si vous voulez le test.this
le contenu, alors split
n'est pas ce dont vous avez besoin. split
divisera votre chaîne autour du test.this
. Par exemple :
>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']
Vous pouvez utiliser re.findall
:
>>> re.findall(r'\w+[.]\w+(?=@)', s) # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s) # capture group
['test.this']
"Dans le mode par défaut, le point (.) correspond à n'importe quel caractère sauf une nouvelle ligne. Si l'indicateur DOTALL a été spécifié, il correspond à n'importe quel caractère, y compris une nouvelle ligne." (Doc. python)
Donc, si vous voulez évaluer la littéralité du point, je pense que vous devriez le mettre entre crochets :
>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'
Pour échapper aux caractères non alphanumériques des variables de chaîne, y compris les points, vous pouvez utiliser re.escape
:
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
sortie :
whatever\.v1\.dfc
vous pouvez utiliser l'expression échappée pour rechercher/apparier la chaîne littéralement.
Voici mon complément à la réponse principale de @Yuushi :
Gardez à l'esprit que la barre oblique inverse ( \
) Le caractère lui-même doit être échappé en Python s'il est utilisé à l'intérieur d'une chaîne régulière ( 'some string'
o "some string"
) au lieu d'un brut chaîne de caractères ( r'some string'
o r"some string"
). Il faut donc garder à l'esprit le type de chaîne que vous utilisez. Pour échapper au point ou au point ( .
) à l'intérieur d'une expression régulière dans une chaîne python régulière, vous devez donc également échapper la barre oblique inverse en utilisant une double barre oblique inverse ( \\
), ce qui fait que la séquence d'échappement totale pour le .
dans l'expression régulière ceci : \\.
comme le montrent les exemples ci-dessous.
Par conséquent, ils ne sont PAS autorisés. Ils provoqueront un avertissement du type suivant :
DeprecationWarning : séquence d'échappement invalide
\.
'\.' # NOT a valid escape sequence in Python
"\." # NOT a valid escape sequence in Python
Et tous ces éléments sont autorisés et sont équivalents :
# Use a DOUBLE BACK-SLASH in Python _regular_ strings
'\\.' # Python regular string
"\\." # Python regular string
# Use a SINGLE BACK-SLASH in Python _raw_ strings
r'\.' # Python raw string
r"\." # Python raw string
[réponse de @Sean Hammond] Comment corriger "<string> DeprecationWarning : invalid escape sequence" en Python ?
Si vous voulez mettre un
\
dans une chaîne de caractères, vous devez utiliser\\
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.