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

前端之家收集整理的这篇文章主要介绍了如何将单元格中的文本与正则表达式匹配并仅保留与正则表达式匹配的文本?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想做的是:有一个很大的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

猜你在找的正则表达式相关文章