Ich versuche, den lokalen Teil einer E-Mail-Adresse vor dem @-Zeichen mit abzugleichen:
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 @
"""
Testen mit:
re.match(LOCAL_RE_NOTQUOTED, "a.a..a@", re.VERBOSE).group()
gibt:
'a.a..a@'
Warum ist die @
in der Ausgabe gedruckt, obwohl ich eine nicht-erfassende Gruppe verwende (?:@)
?
Testen mit:
re.match(LOCAL_RE_NOTQUOTED, "a.a..a@", re.VERBOSE).groups()
gibt:
('a.a..a', 'a', 'a', None)
Warum weist die Regex die Zeichenfolge mit einem Punktpaar nicht zurück? '..'
?