加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何将单元格中的文本与正则表达式匹配并仅保留与正则表达式匹配

发布时间:2020-12-14 06:26:53 所属栏目:百科 来源:网络整理
导读:我想做的是:有一个很大的excel表,有很多随意的客户信息.我想在新的Excel文件中以设置格式对电子邮件地址和其他数据进行排序. 我无法弄清楚如何匹配单元格文本(它将具有像地址电子邮件那样格式化和类似的格式)与正则表达式匹配,并且只保留列表中的正则表达式
我想做的是:有一个很大的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读