と@文字の前に私は、メールアドレスのローカル部分に一致するようにしようとしている:と先読みおよび非キャプチャ正規表現
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, "[email protected]", re.VERBOSE).group()
が得られます。
'[email protected]'
非キャプチャグループを使用していても@
が出力に印刷されるのはなぜですか(?:@)
?
テスト:
re.match(LOCAL_RE_NOTQUOTED, "[email protected]", re.VERBOSE).groups()
ができます:
('a.a..a', 'a', 'a', None)
はなぜ正規表現は、ドット'..'
一対の文字列を拒否していないのですか?
'/([\ S] +)@/g'のような単純な正規表現を使用し、次のステップで不要なガベージからの出力をフィルタリングする方が簡単な場合があります –
@Jakub、あまりにも簡単です。 :)まだ、私はなぜそれが動作しないのだろうかと思っています... – morfys
正規表現の '#'文字はエスケープしてはいけませんか? (コードの第4行と第8行) –