【问题标题】:Ruby Regex - Need to replace every occurrence of a character inside a regex matchRuby Regex - 需要替换正则表达式匹配中出现的每个字符
【发布时间】:2011-11-22 16:01:09
【问题描述】:

这是我的字符串:

mystring = %Q{object1="this is, a testyay', asdkf'asfkd", object2="yo ho', ho"}

我打算用逗号分隔mystring,因此我想(暂时)分出转义引号之间的逗号。

所以,我需要匹配转义引号 + 一些字符 + 一个或多个逗号 + 转义引号,然后 gsub 匹配字符串中的逗号。

我想出的 gsub 正则表达式是 /(".*?),(.*?")/,我是这样使用它的: newstring = mystring.gsub(/(".*?),(.*?")/ , "\\1|TEMPSUBSTITUTESTRING|\\2"),但这只会替换它在转义引号之间找到的第一个逗号。

如何让它替换所有的逗号?

谢谢。

【问题讨论】:

  • require 'csv'; CSV.parse(mystring) 你不需要麻烦的正则表达式。
  • rubular.com 是修改您的表达方式的绝佳场所。

标签: ruby-on-rails ruby regex ruby-on-rails-3


【解决方案1】:

我相信这是实现您想要的结果的一种方法。

newstring = mystring.gsub(/".*?,.*?"/) {|s|  s.gsub( ",", "|TEMPSUBSTITUTESTRING|" ) }

它将匹配的字符串(带引号的部分)传递给代码块,然后替换所有出现的逗号。最初的正则表达式可能是/".*?"/,但它的效率可能较低,因为即使没有逗号,也会为每个带引号的字符串调用代码块。

【讨论】:

    【解决方案2】:

    不要打扰所有这些,只需在这个正则表达式上拆分 mystring

    ,(?=(?:[^"]*"[^"]*")*[^"]*$)
    

    前瞻断言逗号后跟偶数个引号,这意味着它不是在引用的值内。

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 2015-01-04
      • 2015-11-30
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多