【问题标题】:Remove all non-alphabetical, non-numerical characters from a string?从字符串中删除所有非字母、非数字字符?
【发布时间】:2017-03-17 04:51:35
【问题描述】:

如果我想删除以下内容: .!,'"^-# 来自字符串数组,我将如何在保留所有字母和数字字符的同时进行此操作。

允许的字母字符还应包括带有变音符号的字母,包括 à 或 ç。

【问题讨论】:

  • stackoverflow.com/questions/737475/… 这将回答你 50% 的问题
  • 通常我们谈论一个有字符的字符串和一个有不同数据的数组,例如对象、数字或字符串。你真的有一个数组(也许是一个字符串数组?)还是只有一个字符串?
  • -1。与其说是不尝试解决问题,不如说是因为 Phrogz 给出的原因,这个问题是荒谬的。
  • 字符串数组的散列。好的。 (什么?)

标签: ruby regex string


【解决方案1】:

您应该使用具有正确字符属性的正则表达式。在这种情况下,您可以反转 Alnum 类(字母和数字字符):

"◊¡ Marc-André !◊".gsub(/\p{^Alnum}/, '') # => "MarcAndré"

对于更复杂的情况,假设您还想要标点符号,您还可以构建一组可接受的字符,例如:

"◊¡ Marc-André !◊".gsub(/[^\p{Alnum}\p{Punct}]/, '') # => "¡MarcAndré!"

所有字符属性,可以参考doc

【讨论】:

  • 请注意,您正在回答如何对字符串进行 gsub,但标题和描述使用了“数组”一词。
  • @Phrogz:确实。希望OP知道如何做map
【解决方案2】:
string.gsub(/[^[:alnum:]]/, "")

【讨论】:

    【解决方案3】:

    以下内容适用于array

    z = ['asfdå', 'b12398!', 'c98347']
    z.each { |s| s.gsub! /[^[:alnum:]]/, '' }
    puts z.inspect
    

    我借用了 Jeremy 的建议regex

    【讨论】:

    • 谢谢 Phrogz,我完全错过了。 :)
    【解决方案4】:

    您可以考虑使用正则表达式。

    http://www.regular-expressions.info/ruby.html

    我假设您正在使用 ruby​​,因为您在帖子中标记了它。您可以遍历数组,使用正则表达式对其进行测试,如果通过,则根据您使用的正则表达式删除/保留它。

    您可能使用的正则表达式可能是这样的:

    [^.!,^-#]
    

    这将告诉您它是否 不是 括号内的字符之一。但是,我建议您查找正则表达式,一旦您了解它们的语法和用法,您可能会找到更好的解决方案。

    【讨论】:

      【解决方案5】:

      如果你真的有一个数组(如你所说)并且它是一个字符串数组(我猜),例如

      foo = [ "hello", "42 cats!", "yöwza" ]
      

      那么我可以想象你要么想用一个新值更新数组中的每个字符串,要么你想要一个只包含某些字符串的修改数组。

      如果前者(您想“清理”数组中的每个字符串),您可以执行以下操作之一:

      foo.each{ |s| s.gsub! /\p{^Alnum}/, '' }     # Change every string in place…
      bar = foo.map{ |s| s.gsub /\p{^Alnum}/, '' } # …or make an array of new strings
      #=> [ "hello", "42cats", "yöwza" ]
      

      如果是后者(您想选择一个字符串子集,其中每个字符串都符合您仅保存字母数字的标准),您可以使用以下之一:

      # Select only those strings that contain ONLY alphanumerics
      bar = foo.select{ |s| s =~ /\A\p{Alnum}+\z/ }
      #=> [ "hello", "yöwza" ]
      
      # Shorthand method for the same thing
      bar = foo.grep /\A\p{Alnum}+\z/     
      #=> [ "hello", "yöwza" ]
      

      在 Ruby 中,/\A………\z/ 形式的正则表达式需要匹配整个字符串,因为 \A 将正则表达式锚定到字符串的开头,\z 锚定到结尾。

      【讨论】:

        猜你喜欢
        • 2013-04-30
        • 2014-04-26
        • 1970-01-01
        • 2013-01-19
        • 1970-01-01
        • 2015-02-26
        • 1970-01-01
        • 2018-12-02
        • 1970-01-01
        相关资源
        最近更新 更多