Python 重复以前的正则表达式

Python 重复以前的正则表达式,python,regex,Python,Regex,我有一行和任意数量的 0117555 我可以通过这样做得到它 x = re.search("\d+\s+\d+\s+(\d+)\s+(\d+)\s+(\d+)", line) if x != None: print(x.group(1)) print(x.group(2)) print(x.group(3)) 但必须有一种更简洁的方式来写这篇文章。我在文档中寻找重复前面表达式的内容,发现exp{m times} 所以我试着 x = re.

我有一行和任意数量的 0117555

我可以通过这样做得到它

x = re.search("\d+\s+\d+\s+(\d+)\s+(\d+)\s+(\d+)", line)
    if x != None:
        print(x.group(1))
        print(x.group(2))
        print(x.group(3))
但必须有一种更简洁的方式来写这篇文章。我在文档中寻找重复前面表达式的内容,发现exp{m times}

所以我试着

x = re.search("(\d+\s+){5}", line)
然后期望x.group1为0,2为1,3为1,依此类推 但是x.group1输出的是最后一个数字。我有点困惑。谢谢


还有一个旁注。你们有关于regex的在线教程或免费下载书籍的建议吗?

重复捕获组,即能够单独访问匹配的部分–您只需编写regex,或者使用字符串方法,例如,完全避免正则表达式。

重复捕获组,即能够单独实际访问匹配的部分–您只需长时间编写正则表达式或使用字符串方法,例如完全避免正则表达式。

在正则表达式中,只有一个组,因为你只有一对括号。该组将返回最后一场比赛,正如您自己发现的那样

如果你想使用正则表达式,并且你事先知道一行中的整数数,我会选择

x = re.search("\s+".join(["(\d+)"] * 5), line)
在这种情况下

注意

x = re.search("(\d+\s+){5}", line)
最后一个数字后需要一个空格

但对于你举的例子,我会用

line = "0 1 1 75 55"
int_list = map(int, line.split())

在正则表达式中,只有一个组,因为只有一对括号。该组将返回最后一场比赛,正如您自己发现的那样

如果你想使用正则表达式,并且你事先知道一行中的整数数,我会选择

x = re.search("\s+".join(["(\d+)"] * 5), line)
在这种情况下

注意

x = re.search("(\d+\s+){5}", line)
最后一个数字后需要一个空格

但对于你举的例子,我会用

line = "0 1 1 75 55"
int_list = map(int, line.split())
转炉

或者,有了斯文·马纳奇的想法:

print '\n'.join(line.split()[2:5])
转炉

或者,有了斯文·马纳奇的想法:

print '\n'.join(line.split()[2:5])

您是否考虑过findall,它会重复搜索,直到输入字符串耗尽并返回列表中的所有匹配项

>>> import re
>>> line = '0 1 1 75 55'
>>> x = re.findall("(\d+)", line)
>>> print x
['0', '1', '1', '75', '55']

您是否考虑过findall,它会重复搜索,直到输入字符串耗尽并返回列表中的所有匹配项

>>> import re
>>> line = '0 1 1 75 55'
>>> x = re.findall("(\d+)", line)
>>> print x
['0', '1', '1', '75', '55']

对于正则表达式和Python来说,这是一个很好的入门:对于任何想使用.split的人来说,我使用re是因为在实际数据之前有一堆头要经过,我不想在解析之前手动计算要跳过多少行:P谢谢大家对于正则表达式和Python来说,这是一个很好的入门:对于任何想使用.split的人来说,我之所以使用re,是因为在实际数据之前有一大堆头需要处理,我不想在解析之前手动计算要跳过多少行:P谢谢大家