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

Ruby on rails 如何在ruby中的特殊字符前后添加空格?,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,嗨,我想在字符串中的特殊字符前后添加一个空格 冷冻/冷冻/常温(请说明) 我想要这样的结果 冷冻/冷冻/常温(请说明) 有没有可能在ruby regexp中添加空格?试试: > sample = "Frozen/Chilled/Ambient (Please state)" #=> "Frozen/Chilled/Ambient (Please state)" > sample.gsub!("/", " / ") #=> "Frozen / Chilled / Ambi

嗨,我想在字符串中的特殊字符前后添加一个空格

冷冻/冷冻/常温(请说明)

我想要这样的结果

冷冻/冷冻/常温(请说明)

有没有可能在ruby regexp中添加空格?

试试

> 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)" 
注意:
模式
涵盖所有特殊字符

尝试

> 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)" 

注意:
模式
涵盖所有特殊字符

不需要使用复杂的正则表达式

您可以使用
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
    -匹配任何非单词字符
  • -删除周围的空白并将多个空格更改为1
编辑:

根据注释,if还可以使用
/[:punct:][]/

 [[:punct:]] =>  [!"\#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~]
[[:punct:]=>[!”\\\\\$%&'()*+,\-./:;?@\[\\\]^{{124;}]

不需要使用复杂的正则表达式

您可以使用
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
    -匹配任何非单词字符
  • -删除周围的空白并将多个空格更改为1
编辑:

根据注释,if还可以使用
/[:punct:][]/

 [[:punct:]] =>  [!"\#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~]
[[:punct:]=>[!”\\\\\$%&'()*+,\-./:;?@\[\\\]^{{124;}]
试试这个:

sample = "Frozen/Chilled/Ambient (Please state)"
sample.gsub(/([^\w\s])/, ' \1 ')
它得到的不是一个
\w
\w
a-z,a-z,0-9
和未得分
\u
)或空间
\s
。然后
gsub
将自己找到的元素替换为前后的空格。

尝试以下操作:

sample = "Frozen/Chilled/Ambient (Please state)"
sample.gsub(/([^\w\s])/, ' \1 ')

它得到的不是一个
\w
\w
a-z,a-z,0-9
和未得分
\u
)或空间
\s
。然后,
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 ) 

这可能是一个快速的解决方案

"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 ) 


我需要在所有特殊字符之前和之后添加空格。例如[,./\?-\u=+)(*%^$\ 35;@!]@MichealRaj您应该相应地更新您的问题,它当前显示“特殊字符”(单数)。我需要在所有特殊字符之前和之后添加空格。例如[,./\?-\u=+)(*%^$\ 35;!]@MichealRaj您应该相应地更新您的问题,它当前显示“特殊字符”(单数)。整洁的解决方案,我不知道使用
(/W+/)
从我这里获取所有特殊字符(在正则表达式中是可怜的我)1+),更具体地说,它将匹配非单词字符,即除a-z、a-z、0-9和下划线之外的任何字符。像
/[:punct:][]/
这样更具体的字符组可能更合适。啊,这是一个很好的建议,“不需要使用复杂的正则表达式”不应该成为编写带有块的过于热情的gsub、编写太多空格然后用Rails特定方法删除它们的借口-/整洁的解决方案,我不知道使用
(/W+/)
从我这里获取所有特殊字符(在正则表达式中是可怜的我)1+)更具体地说,它将匹配非单词字符,即a-z、a-z、0-9和下划线之外的任何字符。像
/[:punct:][]/
这样更具体的字符组可能更合适。啊,这是一个很好的建议,“不需要使用复杂的正则表达式”不应该成为编写带有块的过于热情的gsub、编写太多空格然后用Rails特定方法删除它们的借口-/Cary还可能反对
gsub
不需要块来执行替换;-)Cary还可能反对第一个方法忽略的
()
。Cary还可能反对
gsub
不需要块来执行替换;-)Cary可能还反对第一个方法忽略
()
。您甚至可以使用
\0
引用整个匹配。您甚至可以使用
\0
引用整个匹配。请定义“特殊字符”。请定义“特殊字符”。