1

これを行う関数を作成しようとしています:

  • .ドメインの先頭または末尾にがないことを確認してください。
  • .ドメインに2 つ存在しないことを確認してください。
  • ドメインに少なくとも 1 つあることを確認.します。

blabla@outlook.com のように、次のようになっていないことを確認する必要があります。

.blabla@outlook.com.
blabla@outlook..com

blabla@outlook.com であること

ドメインを修正するための私のコードは次のとおりです。

import re
def correct_domain(domain):

    if re.search(r'^\.|.$', domain) and re.search(r'\.\.', domain):
        return False
    else re.search(r'\.', domain):
        return True
4

3 に答える 3

3

.$あるべきであり\.$andあるべきですor。はelseである必要があり、ドットをまったく含まないドメインを処理elifするために最後の句を追加する必要があります。else

if re.search(r'^\.|\.$', domain) or re.search(r'\.\.', domain):
    return False
elif re.search(r'\.', domain):
    return True
else:
    return False

ロジックを少し再編成することをお勧めします。最初の 2 つのレジを組み合わせて 1 つにすることができます。return1 つのステートメントですべてを実行できます。

return re.search(r'\.', domain) and not re.search(r'^\.|.$|\.\.', domain):

正規表現なしでこれらの特定のチェックを実行することもできます。これにより、より読みやすくなります。

return '.' in domain and not \
    (domain.startswith('.') or domain.endswith('.') or '..' in domain)
于 2013-08-15T17:45:44.393 に答える
2

これは、正規表現なしで簡単に実行できます。

(domain[0] != '.' != domain[-1] and 
 '..' not in domain and 
 '.'  in domain)

一般に、2 つ以上のピリオドがあるケースを除外したい場合は、次を試すことができます。

domain[0]  != '.' != domain[-1] and domain.count('.') == 1
于 2013-08-15T17:45:16.677 に答える
1

\2 番目のドットの前に a がありません。を次のように変更andしますor

if re.search(r'^\.|\.$', domain) or re.search(r'\.\.', domain):
于 2013-08-15T17:43:43.390 に答える