在两个不同分隔符之间检索数字的Python正则表达式
我有以下字符串在两个不同分隔符之间检索数字的Python正则表达式,python,regex,Python,Regex,我有以下字符串 "h=56,7,1,d=88,9,1,h=58,8,1,d=45,h=100,d=," 我想使用正则表达式来提取组: 第1组56,7,1 第2组88,9,1 第3组58,8,1 第4组45 第5组100 组6空 我的最终目标是创建元组,比如(group1,group2),(group3,group4),(group5,group6)。我不确定这一切是否都可以用正则表达式来完成 下面的正则表达式给出了部分结果 (?<=h=|d=)(.*?)(?=h=|d=) (?您可
"h=56,7,1,d=88,9,1,h=58,8,1,d=45,h=100,d=,"
我想使用正则表达式来提取组:
- 第1组56,7,1
- 第2组88,9,1
- 第3组58,8,1
- 第4组45
- 第5组100
- 组6空
(?<=h=|d=)(.*?)(?=h=|d=)
(?您可能不需要使用regex.A,并且可以执行您需要的操作,如:
代码:
测试代码:
结果:
您可以使用([a-z]=)([0-9,]+)(,)?
只需向组添加索引即可您可以在正向前瞻中使用$
与字符串末尾进行匹配:
import re
input_str = "h=56,7,1,d=88,9,1,h=58,8,1,d=45,h=100,d=,"
groups = []
for x in re.findall('(?<=h=|d=)(.*?)(?=d=|h=|$)', input_str):
m = x.strip(',')
if m:
groups.append(m.split(','))
else:
groups.append(None)
print(groups)
这里,我假设参数只有数值。如果是这样,那么你可以试试这个。
(?您可以使用表达式进行匹配,而不是拆分
[dh]=([\d,]*),
然后抓住第一组,请参见。
就是
在Python中
:
import re
rx = re.compile(r'[dh]=([\d,]*),')
string = "h=56,7,1,d=88,9,1,h=58,8,1,d=45,h=100,d=,"
numbers = [m.group(1) for m in rx.finditer(string)]
print(numbers)
产生
['56,7,1', '88,9,1', '58,8,1', '45', '100', '']
为什么你坚持要用正则表达式来提取它们呢?如果你在=上拆分,然后取其中每一个的RH并用逗号拆分它们呢?迭代enumerate()跳过第一个,然后使用其中的[:-1]来丢弃(显然不需要的)“d”和“h”标签。我猜这是因为他们有11个名声,这表明他们不熟悉python,他们需要使用它来完成这个特定任务。+1表示不使用正则表达式,但是可能没有数字的字母不是最后一个条目(即
h=56,7,1,d=88,9,1,d=,h=58,8,1,d=45,h=100
)可能违反了基本结构,但确定为什么不?
[['56', '7', '1'], ['88', '9', '1'], ['58', '8', '1'], ['45'], ['100'], None]
[dh]=([\d,]*),
[dh]= # d or h, followed by =
([\d,]*) # capture d and s 0+ times
, # require a comma afterwards
import re
rx = re.compile(r'[dh]=([\d,]*),')
string = "h=56,7,1,d=88,9,1,h=58,8,1,d=45,h=100,d=,"
numbers = [m.group(1) for m in rx.finditer(string)]
print(numbers)
['56,7,1', '88,9,1', '58,8,1', '45', '100', '']