Ruby on rails 如何替换逗号前后的所有撇号?

Ruby on rails 如何替换逗号前后的所有撇号?,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我有一个字符串aString=“old_tag1,old_tag2,'new_tag1','new_tag2'” 我想替换逗号前后的撇号。例如,在我的例子中,应该删除包含新标签1和新标签2的撇号。 这就是我现在拥有的 aString = aString.gsub("'", "") 然而,这是有问题的,因为它删除了里面的任何撇号,例如,如果我有“my_tag”而不是“new_tag1”。我怎样才能去掉逗号之前或之后的撇号呢 我期望的输出是 aString = "old_tag1,old_tag2

我有一个字符串aString=“old_tag1,old_tag2,'new_tag1','new_tag2'” 我想替换逗号前后的撇号。例如,在我的例子中,应该删除包含新标签1和新标签2的撇号。 这就是我现在拥有的

aString = aString.gsub("'", "")
然而,这是有问题的,因为它删除了里面的任何撇号,例如,如果我有“my_tag”而不是“new_tag1”。我怎样才能去掉逗号之前或之后的撇号呢

我期望的输出是

aString = "old_tag1,old_tag2,new_tag1,new_tag2"

这就回答了这个问题,“我想替换逗号前后的撇号”

注:


我的猜测是也使用正则表达式,但用一种稍微不同的方式:

aString=“旧标签1、旧标签2、新标签1、新标签2、新标签3、新标签4”
aString.gsub/(?“旧标签1、旧标签2、新标签1、新标签2、新标签3、新标签4”
其思想是找到一个带有边界撇号的子字符串,并将其粘贴回去

regex=/
(?非正则表达式替换
正则表达式可能会变得非常难看。有一种简单的方法只需替换字符串即可:搜索模式
,“
,然后替换为

aString.gsub(",'", ",").gsub("',", ",")
=> "old_tag1,old_tag2,new_tag1,new_tag2'"

这就留下了尾随的
,但这很容易用
.chomp(“”)
删除。前导的
可以用简单的正则表达式
删除。gsub(/^'/,“”)

注意,最后一个撇号仍然是there@Dimitry”询问者说“我想替换逗号前面或后面的撇号。”这是明确的,也是我所做的。询问者确实说,包含“new_tag2”的撇号“应该删除,但这与声明的目标不一致。我相信你根据问题做出了正确的回答,但如果没有最后一部分,我觉得没有太多意义。让我们等待你的澄清请求的答案。你能在某处编辑你的问题吗?我现在不能撤销它。对于
str=“'new_tag's”
str.gsub(r,,)#=>“‘新标签’”
。我相信OP会想要
“新标签”
返回。请为您的示例显示所需的结果。旁白:Ruby约定用于局部变量和方法的名称。例如,在这里,您可以使用
astring
a_string
str
。这只是一个约定,所以您不必这样做,但99%以上的Rubiest遵守约定。您r所需的输出与您对算法的描述不匹配。
new_tag2
后面的撇号在哪里?它不在逗号之前或之后,所以为什么要删除它?我不知道它在标记体中
r = /
    \A     # match beginning of string
    \'     # match single quote
    .*     # match zero or more characters
    \'     # match single quote
    \z     # match end of string
    /x     # free-spacing regex definition mode

aString.split(',').map { |s| (s =~ r) ? s[1..-2] : s }.join(',')
  #=> "old_tag1,x'old_tag2'x,x'old_tag3',new_tag1,new_tag2"
arr = aString.split(',')
  #=> ["old_tag1", "x'old_tag2'x", "x'old_tag3'", "'new_tag1'", "'new_tag2'"]
"old_tag1"     =~ r #=> nil
"x'old_tag2'x" =~ r #=> nil
"x'old_tag3'"  =~ r #=> nil
"'new_tag1'"   =~ r #=> 0
"'new_tag2'"   =~ r #=> 0
aString = "old_tag1,old_tag2,'new_tag1','new_tag2','new_tag3','new_tag4's'"
aString.gsub /(?<=^|,)'(.*?)'(?=,|$)/, '\1\2\3'
#=> "old_tag1,old_tag2,new_tag1,new_tag2,new_tag3,new_tag4's"
aString.gsub(",'", ",").gsub("',", ",")
=> "old_tag1,old_tag2,new_tag1,new_tag2'"