2024-06-25 23:28:27 发布
网友
如何使用正则表达式将<listname>[#]解析为[listname, #]
<listname>[#]
[listname, #]
以下是我尝试过的:
> s = 'li[10]' > re.split(s,r'[%d]') ['[%d]'] > re.findall(s,r'[%d]') [] > s.split(r'[%d]') ['li[0]']
期望的输出是li和10
li
10
首先,您应该将您的模式作为findall命令的第一部分,作为findall( pattern, string)。您的模式只匹配一个数字,即:0到9。要匹配多个数字,可以使用:
findall
findall( pattern, string)
0
9
re.findall(r'\[(\d+)\]', s)
这将只返回数字,而不是方括号。要从括号中获取内容,可以使用:
re.findall(r'(\w)\[(\d+)\]', s)
那(.*)\[(.*)\]呢
(.*)\[(.*)\]
re.findall("(.*)\[(.*)\]", s) # [('li', '10')]
我还可以建议使用一种更严格的模式re.findall:
re.findall
re.findall(r'(\w+)\[(\d+)]', s)
参见Python demo
或zip的变体:
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+)
\[
[
(\d+)
]
首先,您应该将您的模式作为
findall
命令的第一部分,作为findall( pattern, string)
。您的模式只匹配一个数字,即:0
到9
。要匹配多个数字,可以使用:这将只返回数字,而不是方括号。要从括号中获取内容,可以使用:
那
(.*)\[(.*)\]
呢我还可以建议使用一种更严格的模式
re.findall
:参见Python demo
或
zip
的变体:见another Python demo
细节:
(\w+)
-组1捕获一个或多个字母、数字或下划线\[
-a[
文字符号(\d+)
-第2组捕获一个或多个数字]
-结束文字]
符号相关问题 更多 >
编程相关推荐