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形式に近いため、これを解析する1つの方法があります。

#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)"
]

スペースとかっこが含まれていて'、単語内の文字がフィールドの区切り文字として機能するため、これは珍しいように見えますN'...'が、それが質問で言及されているので、これが私が与えるものです。これがあなたが望むものと正確に一致しない場合は、質問の怠惰さを非難してください。

于 2013-02-05T12:43:26.877 に答える
0

すでにN'フィールドを抽出しました。これで、それらをgsubしてXのようなものにすることができます。コンマで分割し、XをN'フィールドに置き換えます。これは解決策ではありませんが、機能します。

于 2013-02-05T12:43:05.693 に答える