J'essaie de faire correspondre la partie locale d'une adresse e-mail avant le caractère @ avec :
LOCAL_RE_NOTQUOTED = """
((
\w # alphanumeric and _
| [!#$%&'*+-/=?^_`{|}~] # special chars, but no dot at beginning
)
(
\w # alphanumeric and _
| [!#$%&'*+-/=?^_`{|}~] # special characters
| ([.](?![.])) # negative lookahead to avoid pairs of dots.
)*)
(?<!\.)(?:@) # no end with dot before @
"""
Testé avec :
re.match(LOCAL_RE_NOTQUOTED, "a.a..a@", re.VERBOSE).group()
donne :
'a.a..a@'
Pourquoi le @
imprimé dans la sortie, même si j'utilise un groupe non capturant. (?:@)
?
Testé avec :
re.match(LOCAL_RE_NOTQUOTED, "a.a..a@", re.VERBOSE).groups()
donne :
('a.a..a', 'a', 'a', None)
Pourquoi la regex ne rejette-t-elle pas la chaîne avec une paire de points ? '..'
?