如果不包含逗号,则将前导引号和尾部引号正则expression

我完全丧失了如何做到这一点。

我的问题:我想要这样做:

"A, two words with comma","B","C word without comma","D" "E, two words with comma","F","G more stuff","H no commas here!" ... (continue) 

对此:

 "A, two words with comma",B,C word without comma,D "E, two words with comma",F,G more stuff,H no commas here! ... (continue) 

我使用的软件在文本文件中创build了1,900条logging,我认为它应该是一个CSV文件,但是编写软件的人不知道CSV文件是如何工作的,因为如果单元格中包含逗号,它就只需要引号(对吧?)。 至less我知道在Excel中它把所有东西放在第一个单元格中。

我更喜欢使用某种命令行工具,如perl或python(我在Mac上)解决这个问题。 我不想在Java中做一个完整的项目或者任何需要处理的东西。

任何帮助是极大的赞赏!

在这里黑暗中拍摄,但我认为Excel将所有内容放在第一列,因为它不知道它是由逗号分隔的数据。

Excel有一个“文本到列”的function,你可以通过分隔符来分隔列(确保你select了逗号)。

这里有更多的信息:

http://support.microsoft.com/kb/214261

编辑

您也可以尝试将文件从* .txt重命名为* .csv。 这将改变Excel读取文件的方式,所以它更好地理解如何parsing里面发现的任何东西。

如果只是抨击是一个select,你可以尝试在terminal这一行:

 cat file.csv | sed 's/"\([^,]*\)"/\1/g' >> new-file.csv 

技术上应该没问题。 它是用“和文本分隔”的,我根本看不出有什么问题,任何一个字段都可以引用,只有一些字段需要引用。代码的编写者不太可能想要结束复杂的逻辑和引用的一切。

清理它的一种方法是将数据提供给csv并将其转储回去。

 import csv from cStringIO import StringIO bad_data = """\ "A, two words with comma","B","C word without comma","D" "E, two words with comma","F","G more stuff","H no commas here!" """ buffer = StringIO() writer = csv.writer(buffer) writer.writerows(csv.reader(bad_data.split('\n'))) buffer.seek(0) print buffer.read() 

Python的csv.writer将默认为“excel”方言,所以在不需要时不会写入逗号。