尝试不使用正则表达式删除标点符号

时间:2018-09-21 13:50:03

标签: ruby

我正在尝试不使用正则表达式从单词数组中删除标点符号。在下面,例如

str = ["He,llo!"]

我想要:

result # => ["Hello"]

我尝试过:

alpha_num="abcdefghijklmnopqrstuvwxyz0123456789"
result= str.map do |punc|  
  punc.chars {|ch|alpha_num.include?(ch)}  
end 
p result

但是它返回["He,llo!"],没有任何改变。无法找出问题所在。

3 个答案:

答案 0 :(得分:3)

include?块返回true/false,请尝试使用select函数过滤非法字符。

result = str.map {|txt| txt.chars.select {|c| alpha_num.include?(c.downcase)}}
            .map {|chars| chars.join('')}

p result

答案 1 :(得分:0)

str=["He,llo!"]
alpha_num="abcdefghijklmnopqrstuvwxyz0123456789"

程序

v=[]<<str.map do |x|
  x.chars.map do |c|
    alpha_num.chars.map.include?(c.downcase) ? c : nil
  end
end.flatten.compact.join

p v

输出

["Hello"]

答案 2 :(得分:0)

exclusions = ((32..126).map(&:chr) - [*'a'..'z', *'A'..'Z', *'0'..'9']).join
  #=> " !\"\#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"

arr = ['He,llo!', 'What Ho!']    

arr.map { |word| word.delete(exclusions) }
  #=> ["Hello", "WhatHo"]

如果您可以使用正则表达式并且确实只想删除标点符号,则可以编写以下内容。

arr.map { |word| word.gsub(/[[:punct:]]/, '') }
  #=> ["Hello", "WhatHo"]

请参见String#delete。请注意,arr未被修改。