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!
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 \.
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']
_
"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'
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]