我将使用以下任何格式获取网址:
- ?M=Foo bar
- ?M=Foo%20bar
- ?M=%20Foo_bar
- ?M=Foo bar?
- ?M=F00_bar
- ?M=Foo#1bar_do
或单词,特殊字符和数字的任意组合。
我可以使用
简单地获取值 params[:M]
问题:
但是,现在我想转换输出并将其存储到变量'm',如:
m = FooBar
1)在这里,忽略所有其他字符((下划线)_,#1,空格,?等)和数字,只取字母。
2)将结果组合成如下形式:
FooBar
FooBarDo
我在正则表达方面不擅长,所以,我将非常感谢您解决此问题的任何帮助
答案 0 :(得分:2)
以下是使用scan
m = "Foo%20bar"
m.scan(/[A-Za-z]/).join #=> Foobar
m = "Foo#1bar_do"
m.scan(/[A-Za-z]/).join #=> Foobardo
m = "F00_bar"
m.scan(/[A-Za-z]/).join #=> Fbar
所以,在你的情况下,你会使用类似的东西:
params[:M].scan(/[A-Za-z]/).join
答案 1 :(得分:1)
检查一下,
m.scan(/[a-z]+/i).join
>> m = "Foo bar"
=> "Foo bar"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "Foo%20bar"
=> "Foo%20bar"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "%20Foo_bar"
=> "%20Foo_bar"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "Foo bar?"
=> "Foo bar?"
>> m.scan(/[a-z]+/i).join
=> "Foobar"
>> m = "F00_bar"
=> "F00_bar"
>> m.scan(/[a-z]+/i).join
=> "Fbar"
>> m = "Foo#1bar_do"
=> "Foo#1bar_do"
>> m.scan(/[a-z]+/i).join
=> "Foobardo"
答案 2 :(得分:0)
如果您想了解有关正则表达式的更多信息,我强烈建议您查看http://rubular.com/。它允许你使用正则表达式和字符串来显示匹配。
其他答案都很好但你也可以使用gsub。
"Foo#1bar_do".gsub(/\p{^Alpha}/, "") #=> "Foobardo"
"Foo%20bar".gsub(/\p{^Alpha}/, "") #=> "Foobar"