remove_quotations('"foo,bar"')
def remove_quotations(str)
if str.start_with?('"')
str = str.slice(1..-1)
end
if str.end_with?('"')
str = str.slice(0..-2)
end
end
class String
def trim sep=/\s/
sep_source = sep.is_a?(Regexp) ? sep.source : Regexp.escape(sep)
pattern = Regexp.new("\\A(#{sep_source})*(.*?)(#{sep_source})*\\z")
self[pattern, 2]
end
end
string = "'This has quotes!'"
trimmed = string[1..-2]
puts trimmed # "This has quotes!"
这也可以转化为一个简单的函数:
# In this case, 34 is \" and 39 is ', you can add other codes etc.
def trim_chars(string, char_codes=[34, 39])
if char_codes.include?(string[0]) && char_codes.include?(string[-1])
string[1..-2]
else
string
end
end
9条答案
按热度按时间vatpfxk51#
从Ruby 2.5开始,反向
chomp(x)
以delete_prefix
的名称可用,而chomp(x)
以delete_suffix
的名称可用,这意味着您可以使用旧答案:对于早期的Ruby版本,你可以使用
chomp
函数,但不幸的是,它只在字符串的末尾工作,假设有一个反向chomp,你可以:实现
rchomp
很简单:请注意,您也可以使用效率稍低的版本内联执行此操作:
bxgwgixi2#
我可以使用gsub来搜索前导或尾随引号,并将其替换为空字符串:
正如下面的评论所建议的,一个更好的解决方案是:
hgncfbus3#
像往常一样,每个人都首先从工具箱中获取regex。:—)
作为替代,我建议研究
.tr('"', '')
(又名“翻译”),在这种情况下,它实际上是剥离引号。cnwbcb6i4#
另一种方法是
它没有RegExps和start_with?/end_with?是很好的可读性。
pxy2qtax5#
strip只对空白有效,这让我很沮丧。我需要剥离各种字符!这里有一个String扩展可以解决这个问题:
输出
wkftcu5l6#
假设引号只能出现在开头或结尾,您可以直接删除所有引号,无需任何自定义方法:
zynd9foi7#
我想要相同的,但对于url路径中的斜杠,可以是
/test/test/test/
(这样它在中间有剥离字符),最终想出了这样的东西来避免regexp:在这种情况下,显然可以翻译为:
或
2q5ifsrm8#
正则表达式可能会非常繁重,并导致一些奇怪的错误。如果你不是在处理大量的字符串,并且数据非常均匀,你可以使用一种更简单的方法。
如果你知道字符串有起始引号和前导引号,你可以拼接整个字符串:
这也可以转化为一个简单的函数:
mw3dktmi9#
你可以用
scan
去掉非可选的引号: