Python 为什么这个正则表达式没有返回所需的匹配项?
我正在尝试分析以下文本:Python 为什么这个正则表达式没有返回所需的匹配项?,python,regex,Python,Regex,我正在尝试分析以下文本: data:{ url: 'stage-player-stat' }, defaultParams: { stageId: 9155, teamId: 32, playerId: -1, field: 2 }, 使用正则表达式: stagem
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)
然而,我并没有用这个来匹配。但在我看来这是正确的。谁能告诉我哪里出了问题
谢谢除了用regexp解析JSON这个更深层次的问题之外,您的regexp不允许在“{”和“url:”之类的组件之间出现空白,也不允许在
defaultParams:{}
中出现所有文本
并且您的regexp URL'ws-stage-stat'
与文本的URL'stage-player-stat'
不匹配
以下内容与您的数据相匹配。(regexp模式通常使用原始字符串文字,以避免反斜杠加倍。)
您的正则表达式没有返回所需匹配项有几个原因:
ws-stage stat
≠ <代码>舞台玩家状态,因此您将无法获得匹配
**还要考虑非单词字符
,多行
,或大写/小写
匹配组
将允许您捕获字符串的所需部分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')]
它看起来像json…你真的想用正则表达式来处理它吗?@JakubJirutka我已经很久没有使用Python了,我以前也从未使用过json解析器。@user3045351好吧,那么你应该先读一读。但是首先试着获取这段数据,不管它的来源是什么,都是有效的json。你可以在这里检查@jerry101 s,如果需要的话,请跟我开个玩笑如果放置re.M,则可以跨多行编写正则表达式?多行选项仅更改
^
和$
锚定的含义(这分别意味着行的开始
,行的结束
),仅此而已。@user3045351我添加了一个与您的示例数据匹配的模式。@casimirithippolyte我对re.M
进行了更正。这里不需要它,因为此模式没有^
或$
锚。
[(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')]