python正则表达式替换重复模式"数字和空间"

时间:2018-01-16 10:38:43

标签: python regex

input = 3136 -2 1806481261 191415576 883713178 259822501 0 79439 0 0 0

我想从上面的输入中提取值259822501.

我可以使用以下正则表达式提取它:

\d+\s-?\d+\s+\d+\s+\d+\s+\d+\s+(\d+)[\d\\s]+.*

如果您在上面的正则表达式中清楚地看到,模式" \ d + \ s +"是重复的。

在这里寻找更高效的正则表达式。

3 个答案:

答案 0 :(得分:1)

您可以在此之后使用重复运算符bin来避免重复使用(非)捕获的组来指示重复次数:

{}

^(?:-?\d+\s+){5}(\d+) 259822501的5次重复之后,我使用了-?\d+\s+。现在,捕获的组1将具有您想要的输出。

示例:

{5}

答案 1 :(得分:0)

\d+\s+\d+\s+\d+\s+\d+\s+

可以替换为

(?:\d+\s+){4}
  • (?:非捕获组

can be checked here on regex101,但由于[\ d \ s]跟随

,最后一位数字存在问题

答案 2 :(得分:-1)

假设输入是一个空格分隔的字符串,并且根据正则表达式,您要提取的数字特别是第6个数字,您可以使用split()并编制索引:

>>> input = '3136 -2 1806481261 191415576 883713178 259822501 0 79439 0 0 0'
>>> input.split()
['3136', '-2', '1806481261', '191415576', '883713178', '259822501', '0', '79439', '0', '0', '0']
>>> input.split()[5]
'259822501'