Python正则表达式解析为2D数组

2024-09-27 00:13:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的字符串,需要解析成一个二维数组:

 str = "'813702104[813702106]','813702141[813702143]','813702172[813702174]'"

数组等价物将是:

^{pr2}$

我试着用正则表达式来做这个。上面的字符串隐藏在一个HTML页面中,但我可以确定它是页面上该模式中唯一的字符串。我不确定这是不是最好的办法,但这是我现在唯一的办法。在

imgRegex = re.compile(r"(?:'(?P<main>\d+)\[(?P<thumb>\d+)\]',?)+")

如果我运行imgRegex.match(str).groups()我只得到一个结果(第一个对联)。我怎样才能得到多个匹配或一个2d匹配对象(如果这样的东西存在的话!)?在

注意:与它看起来的相反,这是不是家庭作业

注意part deux:实际字符串嵌入到大型HTML文件中,因此拆分似乎不是一个选项

我仍然得到这个问题的答案,所以我想我最好编辑一下,以表明为什么我不更改已接受的答案。拆分虽然在这个测试字符串上更有效,但不会从整个HTML文件中提取部分。我可以合并regex和拆分,但这看起来很傻。在

如果您确实有更好的方法从一堆HTML中找到部分(模式\d+\[\d+\]对于源代码中的这个字符串是唯一的),我很乐意更改接受的答案。其他的都是学术性的。在


Tags: 文件字符串答案remainhtml模式页面
3条回答

我会尝试findall或{}而不是{}。在

编辑:是的findall工作非常出色,但我必须将regex简化为:

r"'(?P<main>\d+)\[(?P<thumb>\d+)\]',?"

我想我不会为这个任务使用regex。Python列表理解对此非常强大

In [27]: s = "'813702104[813702106]','813702141[813702143]','813702172[813702174]'"

In [28]: d=[[int(each1.strip(']\'')) for each1 in each.split('[')] for each in s.split(',')]

In [29]: d[0][1]
Out[29]: 813702106

In [30]: d[1][0]
Out[30]: 813702141

In [31]: d
Out[31]: [[813702104, 813702106], [813702141, 813702143], [813702172, 813702174]]

稍微修改一下regexp

>>> str = "'813702104[813702106]','813702141[813702143]','813702172[813702174]"
>>> imgRegex = re.compile(r"'(?P<main>\d+)\[(?P<thumb>\d+)\]',?")
>>> print imgRegex.findall(str)
[('813702104', '813702106'), ('813702141', '813702143')]

这是一个“二维数组”——在Python中是“2元组的列表”。在

相关问题 更多 >

    热门问题