如果我想从一个字符串数组中删除像.!,'"^-#这样的字符,同时保留所有字母和数字字符,应该怎么做呢?
允许的字母字符也应包括带有变音符号的字母,例如à或ç。
允许的字母字符也应包括带有变音符号的字母,例如à或ç。
你应该使用正确的字符属性正则表达式。在这种情况下,你可以反转 Alnum
类(字母和数字字符):
"◊¡ Marc-André !◊".gsub(/\p{^Alnum}/, '') # => "MarcAndré"
对于更复杂的情况,比如说你还想包括标点符号在内,你也可以构建一组可接受的字符,例如:
"◊¡ Marc-André !◊".gsub(/[^\p{Alnum}\p{Punct}]/, '') # => "¡MarcAndré!"
对于所有字符属性,您可以参考文档。
map
函数。 - Marc-André Lafortunestring.gsub(/[^[:alnum:]]/, "")
数组
:z = ['asfdå', 'b12398!', 'c98347']
z.each { |s| s.gsub! /[^[:alnum:]]/, '' }
puts z.inspect
http://www.regular-expressions.info/ruby.html
我假设你在帖子中标记了Ruby,因此我认为你正在使用Ruby。您可以遍历数组,使用正则表达式进行测试,如果通过,则根据您使用的正则表达式删除/保留它。
您可能会使用以下类似的正则表达式:
[^.!,^-#]
这将告诉您它是否不是括号内的任何一个字符。然而,我建议您查阅正则表达式,一旦您了解它们的语法和用法,您可能会找到更好的解决方案。
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" ]
/\A………\z/
的正则表达式要求整个字符串匹配,因为 \A
锚定了正则表达式的开头,\z
锚定了结尾。