メールアドレスの@文字の前のローカル部分を次のように一致させようとしています:
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 @
"""
テスト:
re.match(LOCAL_RE_NOTQUOTED, "a.a..a@", re.VERBOSE).group()
与えます:
'a.a..a@'
@
非キャプチャ グループを使用しているのに、出力にが表示されるのはなぜ(?:@)
ですか?
テスト:
re.match(LOCAL_RE_NOTQUOTED, "a.a..a@", re.VERBOSE).groups()
与えます:
('a.a..a', 'a', 'a', None)
正規表現がドットのペアを含む文字列を拒否しないのはなぜ'..'
ですか?