我正在尝试解析以下文本:
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)
然而,我没有使用此匹配。对我而言看起来是正确的。谁能告诉我哪里出错了?
由于
答案 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)
你的正则表达式没有返回所需的匹配有几个原因:
您的正则表达式实际上与
不匹配 * ws-stage-stat
≠stage-player-stat
,因此您无法获得匹配。
**还要考虑non-word chars
,multiple lines
或upper/lowercase
。
使用match groups
可以捕获所需的字符串部分。
目前还不清楚你要做什么。正如其他人所说,使用库或特定解析器可能更好;我不是一个提倡一件事或另一件事的人 - 但是有效的事情。
如果您想使用正则表达式匹配您的字符串(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')]