为什么这个正则表达式没有返回所需的匹配?

时间:2014-09-06 22:52:04

标签: python regex

我正在尝试解析以下文本:

data:{
                url: 'stage-player-stat'
            },
            defaultParams: {
                stageId: 9155,
                teamId: 32,
                playerId: -1,
                field: 2
            },

使用正则表达式:

stagematch = re.compile('data:{url: \'ws-stage-stat\'},defaultParams: {},', re.S)

然而,我没有使用此匹配。对我而言看起来是正确的。谁能告诉我哪里出错了?

由于

2 个答案:

答案 0 :(得分:1)

除了使用正则表达式解析JSON这个更深层次的问题之外,你的正则表达式不允许组件之间有空格,例如" {"和" url:",以及defaultParams: {}中的所有文字。

您的正则表达式网址'ws-stage-stat'与文字的网址'stage-player-stat'不匹配。

以下内容与您的数据相符。 (对于正则表达式模式,使用原始字符串文字是常见的,以避免必须加倍反斜杠。)

stagematch = re.compile(
    r"data:\s*{\s*url:\s*'stage-player-stat'\s*},\s*defaultParams:\s*{.*},",
    re.S)

答案 1 :(得分:0)

你的正则表达式没有返回所需的匹配有几个原因:

  1. 您的正则表达式实际上与

    不匹配

    * ws-stage-statstage-player-stat,因此您无法获得匹配。

    **还要考虑non-word charsmultiple linesupper/lowercase

  2. 使用match groups可以捕获所需的字符串部分。

  3. 目前还不清楚你要做什么。正如其他人所说,使用库或特定解析器可能更好;我不是一个提倡一件事或另一件事的人 - 但是有效的事情。

    如果您想使用正则表达式匹配您的字符串(json?),包括其他网址,那么您可以执行以下操作:

    p = re.compile(ur'\'(.*)\'|(\w+):\s(.+(?=[,])|.+\n)')
    list = re.findall(p, str)
    print(list)
    

    结果:

    [(u'', u'url', u"'stage-player-stat'\n"), (u'', u'defaultParams', u'{\n'), (u'', u'stageId', u'9155'), (u'', u'teamId', u'32'), (u'', u'playerId', u'-1'), (u'', u'field', u'2\n'), (u'', u'url', u"'ws-stat'\n"), (u'', u'defaultParams', u'{\n'), (u'', u'stageId', u'9155'), (u'', u'teamId', u'32'), (u'', u'playerId', u'-1'), (u'', u'field', u'2\n'), (u'', u'stageId', u'9155'), (u'', u'teamId', u'32'), (u'', u'playerId', u'-1')]
    
相关问题