我想用最簡單的方法刪除字符串中的所有字符。 例如 從"a,sd3 31ds"
到"asdds"
我CAD做這樣的事情:刪除所有非單詞字符的簡單方法
"a,sd3 31ds".gsub(/\W/, "").gsub(/\d/,"")
# => "asdds"
,但它看起來有點彆扭。也許有可能將這些rexegs合併爲一個?
我想用最簡單的方法刪除字符串中的所有字符。 例如 從"a,sd3 31ds"
到"asdds"
我CAD做這樣的事情:刪除所有非單詞字符的簡單方法
"a,sd3 31ds".gsub(/\W/, "").gsub(/\d/,"")
# => "asdds"
,但它看起來有點彆扭。也許有可能將這些rexegs合併爲一個?
"a,sd3 31ds".gsub(/(\W|\d)/, "")
什麼
"a,sd3 31ds".gsub(/\W|\d/,"")
您可以隨時加入|
正則表達式來表達 「或」。
你可以用正則表達式「OR」來做到這一點。
"205h2n0bn r0".gsub(/\W|\d/, "")
會做的伎倆:)
你可以試試這個正則表達式:
\P{L}
不是Unicode信,但我不知道,不Ruby支持這一類。
非正則表達式的解決方案:
"a,sd3 31ds".delete('^A-Za-z')
''a,sd3 [] 31ds「.delete('^ A-z')'=>''asd [] ds」' –
@undur_gongor:啊是的。我會解決它。 – steenslag
我會去的正則表達式/[\W\d]+/
。它可能比例如/(\W|\d)/
。
require 'benchmark'
N = 500_000
Regexps = [ "(\\W|\\d)", "(\\W|\\d)+", "(?:\\W|\\d)", "(?:\\W|\\d)+",
"\\W|\\d", "[\\W\\d]", "[\\W\\d]+" ]
Benchmark.bm(15) do |x|
Regexps.each do | re_str |
re = Regexp.new(re_str)
x.report("/#{re_str}/:") { N.times { "a,sd3 31ds".gsub(re, "") }}
end
end
給出(紅寶石2.0.0p195 [x64的的mingw32])
user system total real
/(\W|\d)/: 1.950000 0.000000 1.950000 ( 1.951437)
/(\W|\d)+/: 1.794000 0.000000 1.794000 ( 1.787569)
/(?:\W|\d)/: 1.857000 0.000000 1.857000 ( 1.855515)
/(?:\W|\d)+/: 1.638000 0.000000 1.638000 ( 1.626698)
/\W|\d/: 1.856000 0.000000 1.856000 ( 1.865506)
/[\W\d]/: 1.732000 0.000000 1.732000 ( 1.754596)
/[\W\d]+/: 1.622000 0.000000 1.622000 ( 1.617705)
Ruby 1.9的一樣。 [鏈接](https://github.com/ruby/ruby/blob/trunk/doc/re.rdoc) – steenslag
@steenslag,太好了。所以提供的正則表達式是正確的。 –