用于空格分隔单词的正则表达式



我正在尝试匹配像

这样的电子邮件页脚
  1. 谢谢,
  2. 谢谢,问候,

在正则表达式的帮助下,我能够得到前2个情况,

({language_keyword_footer[0]}|{language_keyword_footer[1]}(.*?)(S+(.*?)))

语言关键字页脚是我创建的元数据,以便将来添加更多的案例,

keywords = {
"en": {'header':["From:", "Subject:"],'footer':["Regards,", "Thanks,","Thanks & Regards,"]}}

问题是当我使用这种方法时,它只捕获Regards,并丢弃Thanks & Regards,

是否有一种方法可以将其添加到现有的re并捕获此空格分隔的场景,任何帮助都是感激的

您需要按长度按递减顺序对项目进行排序,因为NFA正则表达式引擎中的交替模式遵循"先匹配,先服务";原则(参见"记住正则表达式引擎是急切的");文章)。另外,不要忘记转义正则表达式中用作文字模式的字符串。

你可以用

pattern = r'({})(.*?)(S+)'.format("|".join(map(re.escape, sorted(language_keyword_footer, key=len, reverse=True))))

结果模式看起来像这里的(Thanks & Regards,|Regards,|Thanks,)(.*?)(S+),并且将匹配Thanks & Regards,,Regards,Thanks,(在第1组中),然后匹配除换行符之外的任何零或多个字符尽可能少(在第2组中),然后匹配一个或多个非空白字符(与(S+))。

注意,在regex模式末尾的.*?对最终结果没有影响。

相关内容

  • 没有找到相关文章

最新更新