我正在尝试不使用正则表达式从单词数组中删除标点符号。在下面,例如
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!"]
,没有任何改变。无法找出问题所在。
答案 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
未被修改。