繁体   English   中英

如何在ruby的特殊字符前后添加空格?

[英]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\\waz, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM