如果我想删除以下内容: 。!,'“^ - #来自一个字符串数组,如何在保留所有字母和数字字符的同时进行此操作。
允许的字母字符还应包括带变音标记的字母,包括à或ç。
答案 0 :(得分:17)
您应该使用具有正确字符属性的正则表达式。在这种情况下,您可以反转Alnum
类(字母和数字字符):
"◊¡ Marc-André !◊".gsub(/\p{^Alnum}/, '') # => "MarcAndré"
对于更复杂的情况,假设您还想要标点符号,您还可以构建一组可接受的字符,如:
"◊¡ Marc-André !◊".gsub(/[^\p{Alnum}\p{Punct}]/, '') # => "¡MarcAndré!"
对于所有角色属性,您可以参考doc。
答案 1 :(得分:3)
string.gsub(/[^[:alnum:]]/, "")
答案 2 :(得分:3)
以下内容适用于array
:
z = ['asfdå', 'b12398!', 'c98347']
z.each { |s| s.gsub! /[^[:alnum:]]/, '' }
puts z.inspect
我借用了杰里米的建议regex
。
答案 3 :(得分:1)
您可以考虑使用正则表达式。
http://www.regular-expressions.info/ruby.html
我假设您使用的是ruby,因为您在帖子中标记了它。您可以浏览数组,使用正则表达式进行测试,如果通过则根据您使用的正则表达式删除/保留它。
你可能使用的正则表达式可能是这样的:
[^.!,^-#]
这会告诉你它的不是括号内的一个字符。但是,我建议您查找正则表达式,一旦您知道它们的语法和用法,就可以找到更好的解决方案。
答案 4 :(得分:1)
如果你真的有一个数组(如你所述)并且它是一个字符串数组(我猜),例如。
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
锚定到结尾。