gpt4 book ai didi

ruby - 从 Ruby 字符串中删除除字母和数字以外的所有字符

转载 作者:数据小太阳 更新时间:2023-10-29 06:27:25 25 4
gpt4 key购买 nike

我在表单中有一个字符串输入字段。我在 params hash 中得到了那个值。我应该如何从该字符串中删除除字母和数字之外的所有字符。

最佳答案

只是为了提醒人们好的'ol tr:

asdf.tr('^A-Za-z0-9', '')

找到字符范围的补码并将字符转换为 ''。

我很好奇使用 \W 字符类是否比范围和 gsubtr 更快:

require 'benchmark'

asdf = [('A'..'z').to_a, ('0'..'9').to_a].join

puts asdf
puts asdf.tr( '^A-Za-z0-9', '' )
puts asdf.gsub( /[\W_]+/, '' )
puts asdf.gsub( /\W+/, '' )
puts asdf.gsub( /\W/, '' )
puts asdf.gsub( /[^A-Za-z0-9]+/, '' )
puts asdf.scan(/[a-z\d]/i).join

n = 100_000
Benchmark.bm(7) do |x|
x.report("tr:") { n.times do; asdf.tr('^A-Za-z0-9', ''); end }
x.report("gsub1:") { n.times do; asdf.gsub(/[\W_]+/, ''); end }
x.report("gsub2:") { n.times do; asdf.gsub(/\W+/, ''); end }
x.report("gsub3:") { n.times do; asdf.gsub(/\W/, ''); end }
x.report("gsub4:") { n.times do; asdf.gsub(/[^A-Za-z0-9]+/, ''); end }
x.report("scan:") { n.times do; asdf.scan(/[a-z\d]/i).join; end }
end

>> ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789
>> ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
>> ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
>> ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz0123456789
>> ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz0123456789
>> ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
>> ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
>> user system total real
>> tr: 0.560000 0.000000 0.560000 ( 0.557883)
>> gsub1: 0.510000 0.000000 0.510000 ( 0.513244)
>> gsub2: 0.820000 0.000000 0.820000 ( 0.823816)
>> gsub3: 0.960000 0.000000 0.960000 ( 0.955848)
>> gsub4: 0.900000 0.000000 0.900000 ( 0.902166)
>> scan: 5.630000 0.010000 5.640000 ( 5.630990)

您可以看到一些模式没有捕捉到 '_',它是 \w 的一部分,因此不符合 OP 的要求。

关于ruby - 从 Ruby 字符串中删除除字母和数字以外的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4650812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com