1

以下のフィールドで分割するにはどうすればよいですか (これは sql 形式です)。以前は、',' で分割するだけでしたが、その文字列が引用符で囲まれていると失敗します。残念ながら、数字には引用符がないため、引用符で分割することもできません。

mystring = "(1, 'data, ', 'data_two, ', 'Test 34', '', 'gb', 1, '1')"
mystring.split(', ')

私は得る必要があります

'1'
'data'
'data_two, '
'Test 34'
''
'gb'
'1'
'1'
4

3 に答える 3

1

括弧を取り除くと、 with オプションを使用して強制的に解析可能にすることができCSVます。

CSV.parse_line(mystring[1..-2], {:col_sep=>", ", :quote_char=>"'"})

 => ["1", "data, ", "data_two, ", "Test 34", "", "gb", "1", "1"]
于 2012-11-09T23:10:27.393 に答える
0
mystring.split(/,/).map{|x| x.gsub(/[()\']/,'').strip}
 => ["1", "data", "", "data_two", "", "Test 34", "", "gb", "1", "1"] 
于 2012-11-09T21:29:08.800 に答える
0

これは役立つかもしれません:

irb(main):001:0> mystring
=> "(1, 'data, ', 'data_two, ', 'Test 34', '', 'gb', 1, '1')"
irb(main):002:0> mystring.scan(/(?:'(?:\\.|[^'])*'|[^,' ])+/)
=> ["(1", "'data, '", "'data_two, '", "'Test 34'", "''", "'gb'", "1", "'1')"]

または、引用符と中括弧を削除する必要がある場合は、次のようにします。

irb(main):003:0> mystring.scan(/([^', ()]+)|'([^']*)'/).flatten.compact
=> ["1", "data, ", "data_two, ", "Test 34", "", "gb", "1", "1"]

これは、引用符/ブレース/コンマ/スペース文字以外の単語、または単一の「引用符」内のすべてのものと一致します。(最初の例とは異なり、2 番目の例ではエスケープ シーケンス ( \x) が考慮されていないことに注意してください。ただし、そのような複雑な処理は必要ない場合もあります。)

于 2012-11-10T02:25:27.837 に答える