如果是标点符号,我怎么能从字符串中删除最后一个字符?

oxo*_*oxo 5 ruby regex string substring

Gah,正则表达式有点令人困惑.

我正在尝试删除字符串末尾的所有可能的标点字符:

if str[str.length-1] == '?' || str[str.length-1] == '.' || str[str.length-1] == '!' or str[str.length-1] == ',' || str[str.length-1] == ';' 
    str.chomp!
end
Run Code Online (Sandbox Code Playgroud)

我相信有更好的方法可以做到这一点.有什么指针吗?

Mat*_*hen 8

str.sub!(/[?.!,;]?$/, '')
Run Code Online (Sandbox Code Playgroud)
  • [?.!,;] - 角色类.匹配这5个字符中的任何一个(注意,.在字符类中不是特殊的)
  • ? - 上一个字符或组是可选的
  • $ - 字符串结束.

这基本上用空字符串替换字符串末尾的可选标点符号.如果角色没有标点符号,那就是无操作.