我刚收到一位同事的文件,不知道如何解析这个:
输入:
key,value1,"value2,hello"
期望的输出:
key,value2
Perl或Python是我理解的语言。
谢谢,Bernardo
答案 0 :(得分:3)
标准Perl模块Text::ParseWords可用于处理CSV文件。
#!/usr/bin/perl
use strict;
use warnings;
use Text::ParseWords;
while (<DATA>) {
my @fields = parse_line(',', 0, $_);
# Do something useful with the data in @fields
print join ' | ', @fields;
}
__DATA__
key,value1,"value2,hello"
答案 1 :(得分:2)
这是valid CSV syntax,因此您只需使用CSV解析器。
您没有指定使用哪种语言,但大多数都在类库中可以使用CSV解析器(例如,.NET中的TextFieldParser)或作为外部组件(例如{{3在Apache Commons for Java中)。
如果你做想要重新发明轮子(我不推荐),算法很简单:
result = "", inQuotes = false
read next character
if end-of-line:
if inQuotes:
throw error (unmatched quotes)
yield result
return
else if character = '"':
invert inQuotes
else if character = ',' and not inQuotes:
yield result
result = ""
else:
result += character
答案 2 :(得分:0)
答案 3 :(得分:0)
如果要为此任务使用正则表达式,则以下内容应该有效:
(\S+,)\d+,\"(\d+),\S+\"
(\S+,)
是第一个选择第一个键的捕获组,包括逗号。接下来是一些数字,一个逗号和一个引用\d+,\"
。第二个捕获组(\d+)
选择第二个值,后跟逗号,字符串和引号:,\D+\"
但正如其他人已经写过的那样,其他解决方案并不涉及正则表达式。
答案 4 :(得分:0)