正则表达式 - 如何在exatcly(n)空格之间拉一个字符串?

时间:2016-10-30 21:12:10

标签: python regex python-2.7 regex-negation regex-greedy

我在从字符串列表中提取数字(54878,45666,23331,003455)时遇到了一些问题, 我有一个字符串列表,如下所示(约2700+):

[" 011 54878 20000 0.00", " 45666 134 2.75", " 23331 0 0.00", " 015 00345 -11110 2.75"]

每个新行的数字都不同但有点保持相同的长度, 唯一确定的一致是数字之间的空间......

我试图仅提取第二列数字(54878,45666,23331,00345),有没有办法设置正则表达式代码只在一定数量的空白区域后拉 ,然后开始拉数直到第一个下一个空格

谢谢(:!

4 个答案:

答案 0 :(得分:0)

假设您要跳过的第一个x数字没有小数,您可以使用以下内容:

^(\d+\s){x}(\d+)\s

此处,结果在组#2中捕获。 (确保将x替换为您想要的内容。

例如,^(\d+\s){1}(\d+)\s为您提供的示例在组#2中捕获'54878'。可以找到工作示例和解释here

如果允许小数,则正则表达式有点复杂:

^(\d*\.?\d*\s){1}(\d*\.?\d*)\s

可以找到here的工作示例。

答案 1 :(得分:0)

您可以使用剪切(Linux程序)来分隔以下字段

cut -d " " -f2 test.txt

其中,-d " "表示空格分隔,-f2表示字段2。

示例文本文件test.txt:

011 54878 20000 0.00
012 548781 20000 0.00
013 5487822 20000 0.00
014 54878333 20000 0.00
015 548784444 20000 0.00

答案 2 :(得分:0)

您可以在Python中使用字符串拆分来分隔字段。

with open("test.txt") as fid:
    for line in fid:
        print line.split()[1]

结果打印:

54878
548781
5487822
54878333
548784444

使用示例test.txt文件

011 54878 20000 0.00
012 548781 20000 0.00
013 5487822 20000 0.00
014 54878333 20000 0.00
015 548784444 20000 0.00

答案 3 :(得分:0)

如果你使用python,你可以这样做:

import re

string = "011 54878 20000 0.00"
regex = "^[^ ]* ([0-9]*) .*$"
re.search(regex, string).group(1)