问题是,无论我做什么,如果没有正则表达式的帮助,我似乎都无法创建一个正常化(而不是验证)的函数.例如,我不希望我的代码打印invalidvalid邮箱地址,而是希望它:

  1. 过滤出BEFORE@gmail.com部分的+个标志、.个标志等;
  2. 确保程序不区分大写字母和非大写字母(返回相同的内容).

以下是我正在try 过滤的当前邮箱地址:

johnsmith+panerabread@gmail.com
# should return johnsmith@gmail.com
jOhN.sMiTh@gmail.com
# should return johnsmith@gmail.com

以下是我目前所做的工作:

def normalizeEmail(emailIn):
    if emailIn != regex:
        ch_1 = '+'
        ch_2 = '.'
        new_emailIn = (emailIn.lower().split(ch_1, 1)[0]).replace() + '@gmail.com'
        if emailIn.endswith('@gmail.com'):
            return new_emailIn 
        if new_emailIn != new_emailIn.endswith('gmailcom'):
            return (new_emailIn.lower().split(ch_2, 1)[0]) 

if __name__ == "__main__":
    print(normalizeEmail('johnsmith+panerabread@gmail.com'))
    print(normalizeEmail('jOhN.sMitH@gmail.com'))

.需要更换,+之后的任何东西都应该拆卸.

早些时候,我try 了regex,但它似乎从未正确地正常化邮箱,并且会返回我定制的异常错误:

Invalid Email Address

对于正则表达式,我try 了:

import re
    def normalizeEmail(emailIn)
    regex  = '/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/'
    if emailIn == regex: 
      return 'emailIn'
    if emailIn != regex
      return 'Invalid Email Address'

输出:

Invalid Email Address 

我研究这个程序已经有一段时间了,我真的很沮丧,因为我不能破解它.

请注意,该功能不能太具体,因为它需要正常化一个包含35个其他邮箱地址的字典.然后,我将把列表汇总为标准化的邮箱,并创建它们的列表.

请帮帮忙.这是我编程的头三个月,我已经快要死了.

我try 了正则表达式,并希望返回预期的邮箱格式,但事实并非如此,所以我正在寻找一个不使用正则表达式的解决方案.

推荐答案

对于str个类方法来说,这似乎是一项微不足道的任务:

addresses = [
    'johnsmith+panerabread@gmail.com',
    'jOhN.sMiTh@gmail.com'
]

for address in addresses:
    name, domain = map(str.lower, address.split('@'))
    if domain == 'gmail.com':
        name = name.replace('.', '')
        if '+' in name:
            name, tag = name.split('+', 1)
    print(f'{name}@{domain}')

上面的代码将产生以下输出:

johnsmith@gmail.com
johnsmith@gmail.com

或者,如果您想将其作为一个函数:

def normalize_address(address):
    name, domain = map(str.lower, address.split('@'))
    if domain == 'gmail.com':
        name = name.replace('.', '')
        if '+' in name:
            name, tag = name.split('+', 1)
    return f'{name}@{domain}'


addresses = [
    'johnsmith+panerabread@gmail.com',
    'jOhN.sMiTh@gmail.com'
]

for address in addresses:
    print(normalize_address(address))

Python相关问答推荐

django禁止直接分配到多对多集合的前端.使用user.set()

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

如何指定列数据类型

如何使用SentenceTransformers创建矢量嵌入?

在Python中使用if else或使用regex将二进制数据如111转换为001""

使用Python查找、替换和调整PDF中的图像'

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

如何获得3D点的平移和旋转,给定的点已经旋转?

如何将泛型类类型与函数返回类型结合使用?

如何为需要初始化的具体类实现依赖反转和接口分离?

比较两个有条件的数据帧并删除所有不合格的数据帧

如何在python tkinter中绑定键盘上的另一个回车?

在一个数据帧中,我如何才能发现每个行号是否出现在一列列表中?

递归链表反转与打印语句挂起

如何将验证器应用于PYDANC2中的EACHY_ITEM?

try 使用RegEx解析由标识多行文本数据的3行头组成的日志(log)文件

对列中的数字进行迭代,得到n次重复开始的第一个行号

如何判断特定的OPC UA node 是否已经存在Asyncua?

SQL模型中包含日期时间的TypeError