[英]How to add space before and after the special characters in ruby?
嗨,我想在字符串中的特殊字符之前和之后添加一个空格
冷冻/冷藏/环境(请注明)
我想要这样的结果
冷冻/冷藏/环境(请注明)
有没有可能在ruby regexp中添加空间?
不需要使用复杂的正则表达式
您可以使用gsub
的块语法
"Frozen/Chilled/Ambient (Please state)".gsub(/\W+/) {|w| " #{w} "}
#=> "Frozen / Chilled / Ambient ( Please state ) "
如果要删除重复的空格,可以使用squish
"Frozen/Chilled/Ambient (Please state)".gsub(/\W+/) {|w| " #{w} "}.squish
#=> "Frozen / Chilled / Ambient ( Please state )"
注意:
\\W
匹配任何非单词字符 squish
-删除周围的空白并将多个空格更改为1 编辑:
根据评论,如果还可以使用/[[:punct:]]/
[[:punct:]] => [!"\#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~]
试试String#gsub :
> sample = "Frozen/Chilled/Ambient (Please state)"
#=> "Frozen/Chilled/Ambient (Please state)"
> sample.gsub!("/", " / ")
#=> "Frozen / Chilled / Ambient (Please state)"
注意: gsub!
将覆盖变量本身的值
根据您的评论,您想在每个特殊字符之前和之后添加空间:
> pattern = /[^a-zA-Z0-9|(|)|_|\s\-]/
> sample.gsub(pattern){|match|" #{match} "}
#=> "Frozen / Chilled / Ambient (Please state)"
注意: pattern
涵盖所有特殊字符
尝试这个:
sample = "Frozen/Chilled/Ambient (Please state)"
sample.gsub(/([^\w\s])/, ' \1 ')
它得到的所有内容都不是\\w
( \\w
是az, AZ, 0-9
和非下划线_
)或空格\\s
。 然后, gsub
用前后的gsub
替换自身找到的元素。
这可能是一个快速的解决方案。
"Frozen/Chilled/Ambient (Please state)".split("/").join(" / ")
# => "Frozen / Chilled / Ambient (Please state)"
几分钟后,Cary Swoveland会发表评论,“嘿,儿子,有足够的字符串方法可以解决此问题,您的解决方案效果不佳”-))
对于这种情况,下面的代码段使用字符串方法,并匹配除字母数字和空格以外的所有内容。
q = "Frozen/Chilled/Ambient (Please state)"
puts q.gsub(/[^a-zA-Z0-9. ]/){|s| " #{s} "}
#=> Frozen / Chilled / Ambient ( Please state )
没有障碍。
q.gsub(/([^a-zA-Z0-9.])/, ' \1 ')
#=> Frozen / Chilled / Ambient ( Please state )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.