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 +"是重复的。
在这里寻找更高效的正则表达式。
答案 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'