1

我是正则表达式的新手

我正在尝试为我的 ruby​​ 代码编写一个正则表达式,以检测双引号之间的双引号。

我有这个在 ruby​​ 1.9.3 中运行良好的正则表达式

 /(?<!^|,)"(?!,|$)/

对于这个数组字符串。

s = ("name:","1234",,, "SM红"B"逗" )

斜体 s[4] 在双引号内有双引号。

在 ruby​​ 1.9.3 中,上面写的正则表达式检测 s[4] ie ("B")

我试图为 ruby​​ 1.8.7 编写这个正则表达式它给出了错误

 Undefined (?...) sequence. You might be trying to use named groups with Ruby 1.8.7.

非常感谢您帮我为 ruby​​ 1.8.7 编写此正则表达式代码

我想要这个数组字符串

s = ("姓名:","1234",,, "SM红B逗" )

这样我就可以轻松地将其作为 .csv 文件导入到我的程序中。

4

1 回答 1

6

Ruby 1.8.7 没有lookbehind;这就是为什么它对你失败。所以我想出了这个黑客。它的优点是保留了不需要的 " 字符内的文本。

'"ab","c"d"e",,,"f"'.gsub(/(^\")|(\",+\")|(\"$)/) {|s|s.gsub('"','#')}.gsub('"',"'").gsub('#','"')
=> "\"ab\",\"c'd'e\",,,\"f\""

我在这里所做的是用 # 字符替换开头或结尾的所有 " 或仅用逗号分隔;然后将所有剩余的 " 替换为 ' 字符;然后将 # 替换为 " 字符。您可以使用您知道不会出现在文件中的任何字符或字符串来代替 #。

于 2013-09-04T08:51:42.370 回答