如何使用正则表达式将每行分开以下
3 Name Test 50.5 -
2 Name-Test - 3.12
1 Name Test Test 50.5 -
2 Name Test 32 213.12
3 Name Test 50.5 -
2 Name Test - 50.12
1 Name Test 50.5 -
2 Name Test - -
将分为:
3 | Name Test | 50.5 | -
2 | Name-Test | - | 3.12
1 | Name Test Test | 50.5 | -
2 | Name Test | 32 | 213.12
3 | Name Test | 50.5 | -
2 | Name Test | - | 50.12
1 | Name Test | 50.5 | -
2 | Name Test | - | -
我得到的最远的是:re.compile('(\d+) (.+) (\w+.\w+)')
|
符号所在的位置是分割所需的位置......
答案 0 :(得分:3)
好的,这是另一种方式。这是基于您的特定用例的“拆分”,并不涉及正则表达式。关键的想法是第二列(名称)可以包含空格,而所有其他列都有明确定义的格式。因此,我们的想法是从左右分开,剩下的(名称列)保持不变:
def mysplit(line):
r = line.rsplit(' ', 2)
l = r[0].split(' ', 1)
print " | ".join(l + r[i:])
当我在/tmp/lines.txt
中输入您在IPython中运行以下代码段时:
for l in open('/tmp/lines.txt'):
mysplit(l.strip())
结果:
3 | Name Test | 50.5 | - 2 | Name-Test | - | 3.12 1 | Name Test Test | 50.5 | - 2 | Name Test | 32 | 213.12 3 | Name Test | 50.5 | - 2 | Name Test | - | 50.12 1 | Name Test | 50.5 | - 2 | Name Test | - | -
答案 1 :(得分:2)
匹配的可能合适的正则表达式是:
^(\d+) (.+) (\d+(\.\d+)?|-) (\d+(\.\d+)?|-)$
使用示例:
>>> re.match(r'(\d+) (.+) (\d+(\.\d+)?|-) (\d+(\.\d+)?|-)$', '3 Name Test 50.5 -').groups()
('3', 'Name Test', '50.5', '-')
答案 2 :(得分:1)
试试这个:^(\d+) (.+) (\d+\.\d+|-|\d+) (\d+\.\d+|-|\d+)$
这应匹配所有示例字符串。
所有最好的SMNALLY