Попытка удалить пунктуацию без использования регулярных выражений - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь удалить пунктуацию из массива слов без использования регулярного выражения.Ниже, например,

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 голосов
/ 21 сентября 2018
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

pv

Выход

["Hello"]
0 голосов
/ 21 сентября 2018
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 не изменяется.

0 голосов
/ 21 сентября 2018

include? блок возвращает true/false, попробуйте использовать функцию select для фильтрации недопустимых символов.

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

p result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...