【问题标题】:groupdict in regex正则表达式中的 groupdict
【发布时间】:2020-07-02 04:36:59
【问题描述】:

我有以下字符串:

string = "Malcolm Reynolds"

我为此编写了一个正则表达式,它将找到用户的名字和姓氏:

m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
m.groupdict()

结果:

{'first_name': 'Malcolm', 'last_name': 'Reynolds'}

有时,我不知道姓氏。那时,我的正则表达式失败了。有人对此有任何想法吗?

【问题讨论】:

  • 您能否添加未获得所需结果的示例?只要您正在测试的示例适合它,正则表达式就可以了。
  • @Mandy8055 string = "Malcolm" or string = "Reynolds" 在这种情况下,我的正则表达式失败了。
  • this 有帮助吗?您可以在空格和姓氏前添加? 量词。
  • 是的。这是工作。但如果字符串是“Mr Malcolm Reynolds”。然后这个正则表达式再次失败。我们可以为 Mr、Mrs、Miss 等引用添加正则表达式吗?
  • this 有帮助吗?

标签: python regex regex-group python-re


【解决方案1】:

你可以使用

^(?:(?:M(?:(?:is|r)?s|r)|[JS]r)\.?\s+)?(?P<first_name>\w+)(?:\s+(?P<last_name>\w+))?$

见regex demo

正则表达式详细信息

  • ^ - 字符串开头
  • (?:(?:M(?:(?:is|r)?s|r)|[JS]r)\.?\s+)? - 与可选字符序列匹配的可选非捕获组:Mr、Ms、Mrs、Miss、Jr 或 Sr,在和 1+ 个空格之后带有可选的 .
  • (?P&lt;first_name&gt;\w+) - 组“first_name”:一个或多个单词字符
  • (?:\s+(?P&lt;last_name&gt;\w+))? - - 一个可选的非捕获组,匹配 1+ 个空格,然后将 1 个或多个单词字符捕获到组“last_name”中
  • $ - 字符串结束。

【讨论】:

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