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

时间:2016-09-01 23:07:07

标签: python regex

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

以下是我尝试的内容:

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

所需的输出为li10

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

(.*)\[(.*)\]怎么样?

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

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

答案 2 :(得分:1)

我还可以建议使用更加严格的模式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组捕获一个或多个字母,数字或下划线
  • \[ - [文字符号
  • (\d+) - 第2组捕获1个或多个数字
  • ] - 结束文字]符号