我想做的是:有一个很大的excel表,有很多随意的客户信息.我想在新的Excel文件中以设置格式对电子邮件地址和其他数据进行排序.
我无法弄清楚如何匹配单元格文本(它将具有像地址电子邮件那样格式化和类似的格式)与正则表达式匹配,并且只保留列表中的正则表达式数据.
真的很感激一些帮助.谢谢
import sys,os,openpyxl def sort_email_from_xl(): sheet = sheet_select() #Opens the worksheet emailRegex = re.compile(r'''([a-zA-Z0-9._%+-]+@+[a-zA-Z0-9.-]+(\.[a-zA-Z]{2,4}))''',re.VERBOSE) customeremails = [] for row in range(0,max_row): if cell.text == emailRegex: mail = cell.text customeremails.append(mail) return customeremails print(customeremails)
这段代码应该可行(我只能测试正则表达式部分):
import sys,openpyxl def sort_email_from_xl(): sheet = sheet_select() #Opens the worksheet emailRegex = re.compile(".*?([a-zA-Z0-9\._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,4}).*?") customeremails = [] for row in range(0,max_row): if emailRegex.match(cell.text): mail = emailRegex.match(cell.text).groups()[0] cell.text = mail customeremails.append(mail) print(customeremails)
您的代码存在许多问题.首先关于正则表达式:
>正则表达式不允许在您的电子邮件地址周围添加文字,并添加.*?在开始和结束
>你不需要re.VERBOSE部分,因为如果你想为你的正则表达式添加内联注释,你只需要它,see doc
>您允许使用多个@的电子邮件地址
>您单独匹配TLD,这是不必要的
现在,电子邮件正则表达式适用于基本用法,但我明确建议从Stackoverflow上的其他答案中获取经过验证的电子邮件正则表达式.
然后:使用emailRegex.match(cell.text),您可以检查cell.text是否与您的正则表达式匹配,以及与emailRegex.match(cell.text).groups()[0]匹配,您只提取匹配的部分.你也有一个回复声明.
For some reason the above code is giving me a NameError: name ‘max_row’ is not defined
您需要纠正行中的循环,例如像documented here