regex 使用正则表达式解析电子邮件数据

wi3ka0sx  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(141)

我想通过我的电子邮件收件箱解析,并找到营销电子邮件与优惠券代码在他们提取的代码,从他们的逻辑,我写的作品只有单一类型的数据。

def extract_promo_code(body):
    # Use regular expressions to find promo code
    promo_code_pattern = r'(?i)(?:Enter\s+Code|Enter\s+promo)(?:[\s\n]*)([A-Z0-9]+)'
    match = re.search(promo_code_pattern, body)
    if match:
        promo_code = match.group(1)
        # Remove any non-alphanumeric characters from the promo code
        promo_code = re.sub(r'[^A-Z0-9]', '', promo_code)
        return promo_code
    else:
        return None

以下是几个样本,我想从中提取优惠券代码:
1.“在结账时输入代码。* 优惠有效期至2023年10月6日下午11:59 CT MKEA15EMYZGP8W”
1.“输入代码JSB20GR335F4结束2023年9月21日,在11:59pm CT。*”
我希望代码捕捉的第一个促销代码后的文字“输入代码”或“输入促销”,其中包括一个数字和字母的混合,即使有文本和促销代码之间的换行符和空格。
上面的代码在示例2中运行良好,但没有捕获示例1中的代码。

fnatzsnv

fnatzsnv1#

你可以使用(你可以调整模式,我用的促销代码至少有10个字符)(regex101 demo):

import re

text = """\
Enter code at checkout.* 
Offer valid until October 6, 2023, 11:59pm CT MKEA15EMYZGP8W

Enter code JSB20GR335F4 Ends September 21, 2023, at 11:59pm CT.*
"""

pat = r"""(?s)Enter (?:code|promo).*?\b([A-Z\d]{10,})"""

for code in re.findall(pat, text):
    print(code)

图纸:

MKEA15EMYZGP8W
JSB20GR335F4

相关问题