【问题标题】:regex: retrieve which pattern matched正则表达式:检索匹配的模式
【发布时间】:2018-11-29 03:55:23
【问题描述】:

我正在尝试从电子邮件列表中推断模式,以查看电子邮件 ID 是否遵循 firstname.lastname 或 lastname.firstname 模式。我可以通过使用“或”与以下可能的模式匹配电子邮件

re.match("|".join([regex_pat1, regex_pat2]), email)

一旦我得到匹配,我如何知道列表中的哪个正则表达式模式字符串与目标电子邮件匹配?

编辑:示例

import re
email = "sam.rohn@gmail.com"

patt = ["sam.rohn@gmail.com", "rohn.sam@gmail.com"]

re.match("|".join(patt), email)

这给了我一个匹配对象 <_sre.sre_match span="(0," match="sam.rohn@gmail.com">

我想知道我的“patt”列表中的哪一个模式匹配

【问题讨论】:

  • 您能否提供输入和预期输出的示例?
  • 请注意,您的代码也将匹配sambrohn@gmailecom

标签: python regex


【解决方案1】:

您可以使用括号括起您的模式,并使用匹配组标识您的匹配项,如

patt = ["(sam\.rohn@gmail\.com)", "(rohn\.sam@gmail\.com)"]

here

【讨论】:

    【解决方案2】:

    老实说,你的问题让我很困惑,因为如果你匹配成功,那么模式应该等于email。你可以通过print(email in patt)检查它是否遵循firstname.lastname或lastname.firstname模式,因为你有emailpatt

    在正则表达式中,. 将匹配除行终止符(\n) 之外的所有字符。如果您只想匹配.,则添加反斜杠\.[.]#(not recommended)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多