web-dev-qa-db-fra.com

Expression régulière pour faire correspondre un point

Je me demandais quelle était la meilleure façon de faire correspondre "test.this" de "blah blah blah [email protected] blah blah"? Utilisation de Python.

J'ai essayé re.split(r"\b\w.\w@")

Merci!

72
user179169

Un . dans regex est un métacaractère, il est utilisé pour faire correspondre n'importe quel caractère. Pour faire correspondre un point littéral, vous devez y échapper, donc \.

112
Yuushi

Dans votre regex vous devez échapper à la dot(.) - "\." ou l'utiliser dans un _character class - "[.]"_, car il s'agit d'un méta-caractère dans regex, qui correspond à n'importe quel caractère.

De même, vous avez besoin de _\w+_ au lieu de _\w_ pour correspondre à un ou plusieurs Word.


Maintenant, si vous voulez le contenu de _test.this_, 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']
_
30
Rohit Jain

"Dans le mode par défaut, Dot (.) Correspond à tout caractère sauf une nouvelle ligne. Si l'indicateur DOTALL a été spécifié, cela correspond à tout caractère incluant une nouvelle ligne." (Doc Python)

Donc, si vous voulez évaluer le point littéralement, je pense que vous devriez le mettre entre crochets:

>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah [email protected] blah blah")
>>> resp.group()
'test.this'
10
StackUser

En javascript, vous devez utiliser \. faire correspondre un point.

Exemple

"blah.tests.zibri.org".match('test\\..*')
null

et

"blah.test.zibri.org".match('test\\..*')
["test.zibri.org", index: 5, input: "blah.test.zibri.org", groups: undefined]
0
Zibri