【问题标题】:Python Match GroupPython 匹配组
【发布时间】:2014-05-05 11:10:19
【问题描述】:

我在创建匹配组以使用 python 从字符串中提取两个值时遇到问题

这是我的意见:

# SomeKey: Value Is A String

我希望能够使用 python 匹配组/正则表达式语句提取 SomeKeyValue Is A String。这是我目前所拥有的

import re
line = "# SomeKey: Value Is A String"
mg = re.match(r"# <key>: <value>", line)

【问题讨论】:

    标签: python regex string string-matching


    【解决方案1】:

    你必须提供你匹配的字符串:

    import re
    line = "# SomeKey: Value Is A String"
    mg = re.match(r"# ([^:]+): (.*)", line)
    
    >>> print mg.group(1)
    SomeKey
    >>> print mg.group(2)
    Value Is A String
    

    或者自动获取一个键值元组,你可以这样做:

    import re
    line = "# SomeKey: Value Is A String"
    mg = re.findall(r"# ([^:]+): (.*)", line)
    
    >>> print mg
    [('SomeKey', 'Value Is A String')]
    

    DEMO

    对于名字,你会这样做:

    mg = re.match(r"# (?P<key>[^:]+): (?P<value>.*)", line)
    print mg.group('key')
    

    DEMO

    【讨论】:

    • 我的问题打错了。感谢您的快速回答
    • 如何使用命名组?
    • 我相信它类似于 ()
    • @JonMorehouse,你是什么意思。同时,我再次更新了我的答案
    • @JonMorehouse,答案已更新以包括命名组。
    【解决方案2】:

    除非您的实际用例更复杂,否则您可以使用 findall 直接将值解包到相应的变量中,如下所示:

    import re
    line = "# SomeKey: Value Is A String"
    key, val = re.findall(r"# (.*?): (.*)$", line)[0]
    # (key, val) == ('SomeKey', 'Value Is A String')
    

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2020-11-03
      • 1970-01-01
      相关资源
      最近更新 更多