Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在两个不同分隔符之间检索数字的Python正则表达式_Python_Regex - Fatal编程技术网

在两个不同分隔符之间检索数字的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空
我的最终目标是创建元组,比如(group1,group2),(group3,group4),(group5,group6)。我不确定这一切是否都可以用正则表达式来完成

下面的正则表达式给出了部分结果

(?<=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', '']