在Python中分割多行的引号之间提取字符串

时间:2013-08-31 22:31:33

标签: python regex string

我有一个包含多个条目的文件。每个条目的格式如下:

"field1","field2","field3","field4","field5"

所有字段都保证不包含任何引号,但它们可以包含,。问题是field4可以分为多行。因此,示例文件可能如下所示:

"john","male US","done","Some sample text
across multiple lines. There
can be many lines of this","foo bar baz"
"jane","female UK","done","fields can have , in them","abc xyz"

我想使用Python提取字段。如果该字段不会被分割为多行,则这很简单:Extract string from between quotations。但我似乎无法在多线字段的存在下找到一种简单的方法。

编辑:实际上有五个领域。抱歉,如果有的混乱。该问题已经过编辑以反映这一点。

4 个答案:

答案 0 :(得分:6)

我认为csv模块可以解决这个问题。它使用换行符正确分割:

import csv 

f = open('infile', newline='')
reader = csv.reader(f)
for row in reader:
    for field in row:
        print('-- {}'.format(field))

它产生:

-- john
-- male US
-- done
-- Some sample text
across multiple lines. There
can be many lines of this
-- foo bar baz
-- jane
-- female UK
-- done
-- fields can have , in them
-- abc xyz

答案 1 :(得分:1)

您链接的问题的答案对我有用:

import re
f = open("test.txt")
text = f.read()

string_list = re.findall('"([^"]*"', text)

此时,string_list包含您的字符串。现在,这些字符串中可以包含换行符,但您可以使用

new_string = string_list.replace("\n", " ")

清理它。

答案 2 :(得分:0)

尝试:

awk '{FS=','} /pattern if needed/{print $0}' fname

答案 3 :(得分:0)

如果您控制此文件的输入,则需要先将\n替换为某些内容([\ n]?)进行清理,然后再将值放入以逗号分隔的列表中。

或者,而不是保存字符串 - 将它们保存为r字符串。

然后,使用csv模块使用预定义的分隔符,编码和quotechar快速解析它