我有一个字符串:
(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'.. , ..'
也应该是完整的字段)。
答案 0 :(得分: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)"
]
这看起来不寻常,因为它包含空格和括号,并且单词中的'
字符用作字段N'...'
的分隔符,但由于这是问题中提到的,这是我给的是什么如果这不是你想要的,那就归咎于这个问题的邋。。
答案 1 :(得分: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"
]
注意:这是正确处理双重撇号的唯一解决方案。
答案 2 :(得分:0)
你已经提取了N'个字段,现在你可以将它们变成类似X的东西,用逗号分割它们并用你的N'字段替换X.这不是解决方案,但有效。