Ruby on rails 如何替换逗号前后的所有撇号?
我有一个字符串aString=“old_tag1,old_tag2,'new_tag1','new_tag2'” 我想替换逗号前后的撇号。例如,在我的例子中,应该删除包含新标签1和新标签2的撇号。 这就是我现在拥有的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 = 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'"