我有以下文本,我尝试匹配并删除反斜杠和以下数字:
these failings is india\342\200\231s reluctance
当我使用单引号创建一个字符串并使用\\\d+
时,我会删除这些字符,但是双引号中的此文本返回相同的内容。以下演示了我想说的内容:
>> "these failings is india\342\200\231s reluctance".gsub(/\\\d+/, "")
>> "these failings is india\342\200\231s reluctance"
>> 'these failings is india\342\200\231s reluctance'.gsub(/\\\d+/, "")
>> "these failings is indias reluctance"
原因是什么?如何在双引号中删除这些字符?
答案 0 :(得分:4)
你的问题不在于正则表达式,你的问题在于字符串本身。当你这样说:
"these failings is india\342\200\231s reluctance"
\342\200\231
由字符串解释为为八进制中的三个字节,这三个字节是’
的UTF-8表示形式;结果是你的字符串看起来像这样:
"these failings is india’s reluctance"
这三个字节只是一个UTF-8字符。如果使用单引号构建字符串:
'these failings is india\342\200\231s reluctance'
然后八进制转义序列根本不被解释为八进制字节值,它们只是十二个字符:
\ 3 4 2 \ 2 0 0 \ 2 3 1
你在编辑中看到的。
如果你想删除那个特定的撇号字符,那么你可以这样使用tr
:
"these failings is india\342\200\231s reluctance".tr("\342\200\231", '')
或gsub
喜欢这样(或其他各种方式):
"these failings is india\342\200\231s reluctance".gsub("\342\200\231", '')
"these failings is india\342\200\231s reluctance".gsub(/\342\200\231/, '')
请注意,正则表达式文字提供双引号字符串上下文,因此\nnn
将被解释,就像它们在双引号字符串中一样。
您可能希望从前到后查看编码设置,以确保所有内容(包括终端和编辑器)都设置为使用UTF-8。那会让你的问题更清楚。