从字符串中删除非字母字符和多个空格

时间:2018-02-14 00:04:15

标签: ruby regex

我不确定我在这里做错了什么:

"#New    York".gsub(/[^a-zA-Z\s]/,"").strip

此正则表达式应删除所有非字母字符和大于1个空格的所有空格。

它应该给我以下结果:

"New York"

正则表达式有什么问题?

2 个答案:

答案 0 :(得分:1)

您可以将strip替换为squeeze

"#New    York".gsub(/[^a-zA-Z\s]/,"").squeeze(" ")
# => New York

另一种方法是使用像

这样的正则表达式
"  #New \t   York  ".gsub(/\s{2,}|[^\sa-zA-Z]/, ' ').strip

或者

"  #New \t   York  ".gsub(/(\s){2,}|[^\sa-zA-Z]/, '\1').strip

此处,/\s{2,}|[^\sa-zA-Z]/匹配2个或更多个连续的空格(\s{2,})或(|)除ASCII字母或空格([^\sa-zA-Z])以外的任何字符。如果是(\s){2,},则在\1占位符的帮助下,最后捕获的空格将插入到结果字符串中。

查看Rubular demo

答案 1 :(得分:0)

正则表达式(?:\s+(?=\s)|[^A-Za-z\s]+)

Ruby代码

<parent-element></parent-element>

输出:

"#New    York".gsub(/(?:\s+(?=\s)|[^A-Za-z\s]+)/, '')

Code demo