如何从数组字符串中删除一些特殊字符

Posted

技术标签:

【中文标题】如何从数组字符串中删除一些特殊字符【英文标题】:How can remove some special character from string of array 【发布时间】:2021-12-09 00:25:55 【问题描述】:
def valid_sheet_names
   Company.find(@company_id).asset_types.pluck(:name).reject(&:nil?).map(&:downcase)
end

["hardware", "computer", "network", "mobile devices"]

这个函数返回一个数组。我想从字符串中删除空格、点和下划线。但我不知道我该怎么做

【问题讨论】:

你希望得到一个没有你想删除的字符的字符串数组吗? 是的,我想删除那些字符 这能回答你的问题吗? How do I remove a character from array element? 【参考方案1】:

以@Sumak 的@spickermann 的回答为基础

["hardware", "computer", "network", "mobile devices"].map do |asset_type|
  asset_type.gsub(/[._\s]/, '')
end

这会像这样进入你的代码

def valid_sheet_names
 Company.find(@company_id).asset_types.pluck(:name).reject(&:nil?).map  |name| name.downcase.gsub(/[._\s]/, '') 
end

这里首选gsub 以利用元字符\s,它可以抓取任何类型的空格。

【讨论】:

【参考方案2】:

我会在数据库查询中过滤nil 值,并避免先将它们加载到内存中。然后我会用一个tr 电话来清理这些名字:

def valid_sheet_names
  Company.find(@company_id).asset_types.where.not(name: nil).pluck(:name)
  names.map  |name| name.downcase.tr(' ._', '') 
end

【讨论】:

【参考方案3】:

map 对集合的方式相同,您可以使用块对其进行迭代:

["hardware", "computer", "network", "mobile devices"].map do |asset_type|
  asset_type.delete(' ')
            .delete('_')
            .delete('.')
end

您的函数可能类似于:

def valid_sheet_names
  asset_types = Company.find(@company_id).asset_types.pluck(:name).reject(&:nil?)

  # I'd personally extract normalization to a specific function or module
  asset_types.map do |asset_type|
    asset_type.downcase
              .delete(' ')
              .delete('.')
              .delete('_')
  end
end

您也可以使用gsub(支持正则表达式)。虽然我发现 delete 在我们想要删除时更加明确

【讨论】:

以上是关于如何从数组字符串中删除一些特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

如何使用php从字符串中删除特殊字符,例如:&)(\ /?

在 char 数组中删除特殊字符和字符串

如何从字符串中删除特殊字符?

如何删除从perl读取sql文件时附加的特殊字符

如何从postgresql中的字符串中删除特殊字符

除了文本,如何从文本中删除数字、标点、空格和特殊字符? [复制]