Ruby on rails 如何在ruby中的特殊字符前后添加空格?
嗨,我想在字符串中的特殊字符前后添加一个空格 冷冻/冷冻/常温(请说明) 我想要这样的结果 冷冻/冷冻/常温(请说明) 有没有可能在ruby regexp中添加空格?试试: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
> 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
引用整个匹配。请定义“特殊字符”。请定义“特殊字符”。