Python 如何检查除某些值外是否为字母数字

Python how to check if something is alphanumeric except for certain values

我正在尝试确定字符串是否为电子邮件。要求当然是@email.com,第一个字母必须大写并且必须是字母数字,除了@和句点。我一直在寻找的是是否有办法检查电子邮件是否为字母数字,除了句点和 @

我想要的是代码 return 对于电子邮件为真当且仅当第一个字母是大写时,它有 @emuail.com 并且它是字母数字除了 @和期间。我想要的是一种检查字母数字的解决方案,除了电子邮件的 @emauil.com 部分中的 @ 和句点。

我想我可以在@email 部分分隔电子邮件并检查@email 之前的所有内容的.isalnum,但我只是想看看是否有更简单的方法。

这是我当前的代码,当然 return 都是假的,因为 @ 和句点:

emails = ['Hello@emuail.com', 'Hello2@emuail.comaas', 'hello--1@emuail.com']

result = []

for idx, email in enumerate(emails):
  if '@emuail.com' in email and email[0].isupper() and email.isalnum():
    result.append(True)
  else:
    result.append(False)

print(result)

当字符串 searching/testing 变得稍微复杂时,使用 regular expressions.

通常更好(更具可读性和灵活性)
import re

# from https://emailregex.com/
email_pattern = re.compile(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)")

emails = ['Hello@emuail.com', 'Hello2@emuail.comaas', 'hello--1@emuail.com']

for email in emails:
    if email_pattern.match(email):
        print(email)

请注意,电子邮件地址中允许使用连字符,但如果您出于某种原因不想使用它们,请将它们从正则表达式中删除。

此生成器将 return 有效电子邮件。如果您需要更多规则,请将它们添加到条件中。然而,re 更好。


emails = ['Hello@emuail.com', 'Hello2@emuail.comaas', 'hello--1@emuail.com']

[i for i in emails if '@' in i and i[-4:] == '.com' and i.split('@')[0].isalnum() and '@' is not i[-5]]