0

我有一个字符串:

(3592, -1, 7, N'SUNWopensp-root', N'1.5,REV=10.0.3.2004.12.15.14.19', N'Sun Microsystems, Inc.', N'The OpenJade Group''s SGML and XML parsing tools - platfowrm independent files, / filesystem', N'SunPackage', abc, 83)

我需要用逗号分隔它,但不是 N' ... ' 子字符串中的那些。

我设法N' ... '用这个提取了字符串的所有内容:

N\'(.*?)(?:\',|\)|\'\))

但这不会拆分逗号"3592, -1, 7"等,而我不能单独拆分逗号,因为这会N' ... '用逗号分解字符串。最终目标是让所有字段以逗号分隔,N' ... '字符串中的字段除外(即N'.. , ..'也应该是一个完整的字段)。

4

3 回答 3

1

由于这接近 CSV 格式,因此这是解析它的一种方法。

#remove parens and N's
csv = str.gsub(/^\(|\)$/, "").gsub(/, N/, ",")

CSV.parse_line(csv, {:quote_char => "'"})

输出:

[
 "3592",
 " -1",
 " 7",
 "SUNWopensp-root",
 "1.5,REV=10.0.3.2004.12.15.14.19",
 "Sun Microsystems, Inc.",
 "The OpenJade Group's SGML and XML parsing tools - platfowrm independent files,
 / filesystem",
 "SunPackage",
 " abc",
 " 83"
]

注意:这是正确处理双撇号的唯一解决方案。

于 2013-02-05T13:27:14.850 回答
1
given_string.scan(/(?:(?:N'.*?')|[^,])+/)

给出:

[
  "(3592",
  " -1",
  " 7",
  " N'SUNWopensp-root'",
  " N'1.5,REV=10.0.3.2004.12.15.14.19'",
  " N'Sun Microsystems, Inc.'",
  " N'The OpenJade Group''s SGML and XML parsing tools - platfowrm independent files",
  " / filesystem'",
  " N'SunPackage'",
  " abc",
  " 83)"
]

这看起来不寻常,因为它包含空格和括号,并且单词中的'字符用作 field 的分隔符N'...',但由于这是问题中提到的,这就是我给出的。如果这不是您想要的,请归咎于问题的草率。

于 2013-02-05T12:43:26.877 回答
0

您已经提取了 N' 个字段,现在您可以将它们 gsub 变成类似于 X 的东西,用逗号分隔它们并将 X 替换为您的 N' 个字段。这不是解决方案,但有效。

于 2013-02-05T12:43:05.693 回答