【问题标题】:String parsing in rubyruby 中的字符串解析
【发布时间】:2020-02-27 05:35:03
【问题描述】:

我有一个字符串需要用 ruby​​ 解析,例如:

a = '"a,b","c,d","e,f"'

我使用 Postgres 作为数据库,使用下面的返回不同的输出。

# example:
a = '"a,b","c,d","e,f"'
a.split('"')
#=> ["", "a,b", ",", "c,d", ",", "e,f"]

预期的输出是["a,b" "c,d","e,f"]

【问题讨论】:

  • 你的例子是 Ruby-only。这与 Postgres 有什么关系?

标签: ruby-on-rails ruby string string-parsing


【解决方案1】:

您可以将String#split 与正则表达式一起使用。

str = '"a,b","c,d","e,f"'
  #=> "\"a,b\",\"c,d\",\"e,f\"" 

arr = str.split(/(?<="),(?=")/)
  #=> ["\"a,b\"", "\"c,d\"", "\"e,f\""] 
puts arr
"a,b"
"c,d"
"e,f"

正则表达式为:“匹配一个逗号,前面有一个双引号((?&lt;=") 是一个正向lookbehind),后跟一个双引号((?=") 是一个正向lookahead )。(事实上,对于给定的示例,只需要包含其中一种肯定的外观。)

【讨论】:

  • 在你的解释中,你用错了(?&lt;=")而不是(?=")
【解决方案2】:

您的字符串似乎包含逗号分隔值,因此您可以使用 Ruby 的 CSV 库:

require 'csv'

CSV.parse_line('"a,b","c,d","e,f"')
#=> ["a,b", "c,d", "e,f"]

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2023-04-07
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多