如何用冒号分割字符串而不是引号

Mus*_*max 2 ruby regex csv

我有一个由冒号分隔的CSV文件,但它包含用引号括起来的文本字段,它们本身包含几个冒号.

我想要一个简单的解决方案来获取数据字段,但是例如.在ruby中,split方法在每个冒号上分裂.

有没有匹配所有冒号的正则表达式,除了用引号括起来的那些?

Phr*_*ogz 8

鉴于:

str = 'foo:bar:"jim:jam":jar'
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

a = str.scan( /([^":]+)|"([^"]+)"/ ).flatten.compact
p a
#=> ["foo", "bar", "jim:jam", "jar"]
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做:

a = []
str.scan( /([^":]+)|"([^"]+)"/ ){ a << ($1 || $2) }
p a
#=> ["foo", "bar", "jim:jam", "jar"]
Run Code Online (Sandbox Code Playgroud)

那些正则表达式说找到

  • 一个或多个不是引号或冒号的字符,
  • 引号,后跟一个或多个非引号的字符,后跟引号.


DGM*_*DGM 6

只需使用http://ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html即可

  • 如果您展示了如何使用CSV将分隔符更改为冒号,这将是完美的答案. (2认同)