按“:”拆分多行

时间:2015-02-01 08:03:43

标签: python regex split

我有一组文件如下:

Product: Name
Description: description of product

我想在没有'Product:''Description:'的情况下仅提取名称和说明的内容。为此我做了:

div = re.split('Product:\s+|Description:\s+', contentOfFile)

问题是我得到一个包含3个元素的表而不是2个用' ' (空间)一开始。我不知道是否总是考虑到空间,因为我只是想了解这种情况:

["Name","description of product"]

4 个答案:

答案 0 :(得分:5)

让我们简化你的例子。如果我们拆分管道而不是正则表达式怎么办?

>>> "|a|b".split('|')
['', 'a', 'b']

如果字符串以分隔符开头,则split将在返回的值中添加一个额外的空元素。现在在你的情况下,分隔符是一个正则表达式,但同样地,你的字符串以与该表达式匹配的东西开头,所以第一个返回的元素是一个空字符串。

要解决这个问题,您可以跳过第一个元素

div = re.split('Product:\s+|Description:\s+', contentOfFile)[1:]

答案 1 :(得分:4)

您不需要split,请使用findall

>>> re.findall(r":\s+(.*)", a)
['Name', 'description of product']

使用此解决方案,您不会依赖于:之前的文字,所以即使您有:

SomeText: Name
BlaBlaBla: description of product

它会提取Namedescription of product。为您的问题编写通用解决方案并尝试考虑可能的未来场景是一种很好的做法。

答案 2 :(得分:0)

通过拆分方法的一般解决方案,不使用正则表达式。

>>> x = """Product: Name
Description: description of product"""
>>> [i.split(':')[1].lstrip() for i in x.split('\n')]
['Name', 'description of product']

答案 3 :(得分:-1)

我认为你可以尝试剥离功能而不是拆分... 它aldo帮助删除空间.. 这里是一个分裂函数的小例子

str1 = "Product: Name";
str2 = "Description: description of product";
print str1.lstrip('Product:, ');
print str2.lstrip('Description:, ');

,输出如下所示....

Name
description of product