Ruby Regex – 需要替换正则表达式匹配中每个字符的出现
这是我的字符串:
mystring = %Q{object1="this is, a testyay', asdkf'asfkd", object2="yo ho', ho"}
我将在逗号上拆分mystring
,因此我想(暂时)分出位于转义引号之间的逗号。
所以,我需要匹配转义引号+一些字符+一个或多个逗号+转义引号,然后在匹配的字符串中gsub逗号。
我想出的gsub的正则表达式是/(".*?),(.*?")/
,我就像这样使用它: newstring = mystring.gsub(/(".*?),(.*?")/ , "\\1|TEMPSUBSTITUTESTRING|\\2")
,但这只替换它在转义引号之间找到的第一个逗号。
如何让它替换所有逗号?
谢谢。
我相信这是达到你想要的结果的一种方法。
newstring = mystring.gsub(/".*?,.*?"/) {|s| s.gsub( ",", "|TEMPSUBSTITUTESTRING|" ) }
它将匹配的字符串(引用的部分)传递给代码块,然后代码块替换所有出现的逗号。 最初的正则表达式可能是/".*?"/
,但它可能效率较低,因为即使它没有逗号,也会为每个引用的字符串调用代码块。
不要为此烦恼,只需在这个正则表达式上拆分mystring
:
,(?=(?:[^"]*"[^"]*")*[^"]*$)
前瞻断言,逗号之后是偶数引号,这意味着它不在引用值内。