我目前正在使用带有gsub()
的正则表达式对字符串进行大量处理,但是我将它们严重链接起来,这开始变得混乱。你能帮我构建一个单一的正则表达式:
string.gsub(/\.com/,'').gsub(/\./,'').gsub(/&/,'and').gsub(' ','-').gsub("'",'').gsub(",",'').gsub(":",'').gsub("#39;",'').gsub("*",'').gsub("amp;",'')
基本上上面的内容删除了以下内容:
有更简单的方法吗?
答案 0 :(得分:3)
您可以组合删除字符的那些:
string.gsub(/\.com|[.,:*]/,'')
管|
表示“或”。 or的右边是一个字符类;它的意思是“其中一个角色”。
答案 1 :(得分:1)
随着您添加更多选项,转换表的可扩展性更高:
translations = Hash.new
translations['.com'] = ''
translations['&'] = 'and'
...
translations.each{ |from, to| string.gsub from, to }
答案 2 :(得分:0)
以蒂姆的回答为基础:
你可以将一个块传递给String.gsub
,这样你就可以将它们全部组合起来,如果你愿意的话:
string.gsub(/\.com|[.,:*& ']/) do |sub|
case(sub)
when '&'
'and'
when ' '
'-'
else
''
end
end
或者,根据echoback的答案,您可以在块中使用翻译哈希(您可能需要调用translations.default = ''
才能使其正常工作):
string.gsub(/\.com|[.,:*& ']/) {|sub| translations[sub]}
使用块的最大好处是只有一次调用gsub
(不是有史以来最快的函数)。
希望这有帮助!