在使用正则表达式解析时删除空格

时间:2014-11-29 21:15:13

标签: python regex parsing removing-whitespace

我正在使用正则表达式来解析某些模式的文件。但是,如果我的数据中间有一些空格,我最终会得到错误的数据。 我有这种格式的数据:

067  000100 A
067  000200 B
067 000300  C
067  000400 D
067 000500  E
067  000600 F

我正在尝试获取前两个字符串,第二个字符串的中间两位数字和这样的值:(有些情况下我可能有7位数字,这就是为什么在这种情况下可以使用一个正则表达式最后的额外数字)

('67 000100 ', '01', 'A')

我使用以下正则表达式:

qnum = r'067'
subq = r' .00' #using . because I am not sure if there's one space or two!
fmt = r'(?sm)^(' + qnum + subq + r'(..)...)\s*(.*?)\s*$'
#data is a string with all those values and \n
result = re.findall(fmt,data, re.I)

但最后我最终得到以下结论:

('67  000100 ', '01', 'A')
('67  000200 ', '02', 'B')
('67 000300  ', '30', 'C')

如何获得正确的标题,以便中间只有“一个空格”,还有正确的中间数字?

3 个答案:

答案 0 :(得分:0)

我可以尝试这种方式:

#!/usr/bin/python

import re

s = """
067  000100 A
067  000200 B
067 000300  C
067  000400 D
067 000500  E
067  000600 F
"""

for line in s.split('\n'):
    if line.split():
        m = re.match("(\d+\s+\d{2}(\d{2})\d{2})\s+(\S)", line)
        print m.groups()

输出:

 ('067  000100', '01', 'A')
 ('067  000200', '02', 'B')
 ('067 000300', '03', 'C')
 ('067  000400', '04', 'D')
 ('067 000500', '05', 'E')
 ('067  000600', '06', 'F')

答案 1 :(得分:0)

怎么样

>>> subq = r'\s*00'
>>> fmt = r'(?sm)^(' + qnum + subq + r'(..)...)\s*(.*?)\s*$'
>>> result = re.findall(fmt,data, re.I)
>>> result
[('067  000600 ', '06', 'F')]

更改

  • subq = r'\s*00'由于您不确定使用的空格数\s*是否匹配任意数量的空格

答案 2 :(得分:0)

.并不代表可选字符;它只是意味着一个角色。您需要.

,而不是空格\s+