繁体   English   中英

Python Regex将一条线分成4部分

[英]Python Regex to Split a line into 4 parts

我如何使用正则表达式将每一行拆分如下

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+)')

无论哪里| 符号是需要分割的地方...

好的,这是另一种方式。 这是针对特定用例的“拆分”,不涉及正则表达式。 关键思想是第二列(名称)中可以有空格,而所有其他列都具有明确定义的格式。 因此,想法是从左右分开,其余部分(名称列)保持不变:

def mysplit(line):
    r = line.rsplit(' ', 2)
    l = r[0].split(' ', 1)
    print " | ".join(l + r[i:])

当我在IPython中使用/tmp/lines.txt的输入运行以下代码段时:

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 | - | -

要匹配的可能适当的正则表达式为:

^(\d+) (.+) (\d+(\.\d+)?|-) (\d+(\.\d+)?|-)$

用法示例:

>>> re.match(r'(\d+) (.+) (\d+(\.\d+)?|-) (\d+(\.\d+)?|-)$', '3 Name Test 50.5 -').groups()
('3', 'Name Test', '50.5', '-')

试试这个: ^(\\d+) (.+) (\\d+\\.\\d+|-|\\d+) (\\d+\\.\\d+|-|\\d+)$

这应该与您所有的示例字符串匹配。

一切顺利

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM