python regex将列表项的名称拆分为列表名和索引

2024-06-25 23:28:27 发布

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

如何使用正则表达式将<listname>[#]解析为[listname, #]

以下是我尝试过的:

> s = 'li[10]'
> re.split(s,r'[%d]')
['[%d]']
> re.findall(s,r'[%d]')
[]
> s.split(r'[%d]')
['li[0]']

期望的输出是li10


Tags: relisplitfindalllistname
3条回答

首先,您应该将您的模式作为findall命令的第一部分,作为findall( pattern, string)。您的模式只匹配一个数字,即:09。要匹配多个数字,可以使用:

 re.findall(r'\[(\d+)\]', s)

这将只返回数字,而不是方括号。要从括号中获取内容,可以使用:

re.findall(r'(\w)\[(\d+)\]', s)

(.*)\[(.*)\]

re.findall("(.*)\[(.*)\]", s)

# [('li', '10')]

我还可以建议使用一种更严格的模式re.findall

re.findall(r'(\w+)\[(\d+)]', s)

参见Python demo

zip的变体:

import re
s = 'li[10] li[11]'
names, ids = zip(*re.findall(r"(\w+)\[(\d+)]", s))
print(names)
print(ids)

another Python demo

细节:

  • (\w+)-组1捕获一个或多个字母、数字或下划线
  • \[-a [文字符号
  • (\d+)-第2组捕获一个或多个数字
  • ]-结束文字]符号

相关问题 更多 >