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
我确信有更好的方法可以做到这一点。有什么指针吗?
答案 0 :(得分:8)
str.sub!(/[?.!,;]?$/, '')
[?.!,;]
- 角色类。匹配这5个字符中的任何一个(注意,.
在字符类中并不特殊)?
- 上一个字符或组是可选的$
- 字符串结束。这基本上用空字符串替换字符串末尾的可选标点符号。如果角色没有标点符号,那就是无操作。
答案 1 :(得分:2)
最初的问题是“删除字符串末尾的所有可能的标点符号”,但是仅提到的示例显示了5,“?”,“。”,“!”,“,”,“;”。其他标点符号如“:”,“”等应包含在“所有可能的标点符号”中,因此请使用kurumi所指出的:punct:character类:
str.sub!(/[[:punct:]]?$/,'')
答案 2 :(得分:0)
所有非单词字符。
text.gsub(/\W$/, "")
这样做的目的是查看字符串,在结尾处找到标点符号,并全局替换为nothing =从而删除它。
这确实有效,而且使用正则表达式是一种红宝石。
答案 3 :(得分:0)
您应该能够使用正则表达式来执行此操作。我对ruby没有任何经验,但这是一个应该有效的RegEx:
/(.*)[^\w\d]?$/
您可以使用反向引用#1来获取没有最后一个标点字符的字符串。
答案 4 :(得分:0)
mystring.gsub(/[[:punct:]]+$/,"")
答案 5 :(得分:0)
不使用空字符串:
str = /[?.!,;]?\z/.match(str).pre_match
或以其他顺序
str = str.match(/[?.!,;]?\z/).pre_match
答案 6 :(得分:0)
str.chomp!
不会做任何事情。你必须做str.chop!