多行按“:”拆分

Split according to ":" in multiple lines

我有一组文件组成如下:

Product: Name
Description: description of product

我只想提取名称和描述的内容,不带 'Product:''Description:'。为此,我这样做:

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

问题是我得到的 table 包含 3 个元素,而不是 2 个元素,开头带有 ' ' (space)。我不知道 space 是否总是被考虑在内,因为我只想在这种情况下得到:

["Name","description of product"]

你不需要split,使用findall:

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

使用此解决方案,您将不会依赖于 : 之前的文本,因此即使您有:

SomeText: Name
BlaBlaBla: description of product

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

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

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

如果字符串以分隔符开头,split 将在返回值中添加一个额外的空元素。现在在您的情况下,分隔符是一个正则表达式,但类似地,您的字符串以与该表达式匹配的内容开头,因此第一个返回的元素是一个空字符串。

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

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

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

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

我想你可以试试 strip 函数而不是 split... 它也有助于删除 space.. 这里有一个拆分函数的小例子

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

输出如下所示....

Name
description of product