我想做的是:有一个很大的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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。