从字符串中删除所有非西里尔符号

时间:2013-05-07 11:47:12

标签: ruby regex

我想在我的表单上有一个字段,它可以包含一些符号,如#,$等。但对于另一种情况,我想只有字母,没有任何符号。我如何剪切所有非字母符号并留下所有俄语cyrullic字母

这是一个小例子:

我有字符串"йцукен#$%йцукен"

最终希望获得"йцукен йцукен"

3 个答案:

答案 0 :(得分:4)

试试这个:

'йцукен#$%йцукен'.gsub(/\P{Cyrillic}++/, ' ')

解释:

\ p {Cyrillic}是西里尔字母的字符类。

\ P {Cyrillic}包含非西里尔字母的所有字符。

如果你想保留其他角色,你可以这样做:

'123йцукен#$%йцукен456'.gsub(/[^\p{Cyrillic}0-9]++/, ' ')

答案 1 :(得分:0)

使用允许字符列表的暴力

def filter(input, allowed)
  input.chars.inject('') do |result, char|
    result << char if allowed.include? char
    result
  end
end

test_string = 'abc$6&йцxyz'
allowed_characters = 'abcxyzйц'

puts filter(test_string, allowed_characters)
=> abcйцxyz

答案 2 :(得分:-1)

您在问题中使用的表达式"йцукен#$%йцукен"不是有效的Ruby表达式。双引号内的#$用作插值。如果您的意思是字符串'йцукен#$%йцукен',并且如果您想用空格替换'#%$'之类的字符序列而不是仅删除它们,那么,以下内容可以正常工作。

'йцукен#$%йцукен'.tr('#%$', " ").squeeze(" ")
# => "йцукен йцукен"
相关问题