如何使用正则表达式将<listname>[#]
解析为[listname, #]
?
以下是我尝试的内容:
> s = 'li[10]'
> re.split(s,r'[%d]')
['[%d]']
> re.findall(s,r'[%d]')
[]
> s.split(r'[%d]')
['li[0]']
所需的输出为li
和10
答案 0 :(得分:1)
首先,您应该将您的模式作为findall
命令的第一部分findall( pattern, string)
。您的模式仅匹配一个数字,即:0
到9
。要匹配多个数字,您可以使用:
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)
详细:
(\w+)
- 第1组捕获一个或多个字母,数字或下划线\[
- [
文字符号(\d+)
- 第2组捕获1个或多个数字]
- 结束文字]
符号