我需要在我的文字中搜索“£”符号,但它不断出现错误:
invalid character property name {`£`}: /\p{`\u00A3`}/ (SyntaxError)
我在顶部有#encoding:utf-8,我正在使用它的上下文是:
original_contents << line.gsub(/[abc]/, '*')
.gsub(/\p{£}/, '')
当我尝试.gsub(/£/, '')
时,我会
C:/Users...Epub run through.rb:12:in `gsub': incompatible encoding regexp match (UTF-8 regexp with CP850 string) (Encoding::CompatibilityError)
from C:/Users...Epub run through.rb:12:in `block in <top (required)>'
from C:/Users...Epub run through.rb:9:in `each_line'
from C:/Users...Epub run through.rb:9:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
答案 0 :(得分:1)
在正则表达式中,\p
用于匹配&#34;字符属性&#34;这基本上是一组以某种方式相关的字符(例如数字字符,ASCII字符等)。文档列出了字符属性here。根据该列表(以及您的错误消息),您的代码中的字符属性无效。
您应该使用/£/
。您在 案例中遇到的错误是因为您的字符串不是UTF-8编码的。 Regexp默认使用源编码(UTF-8)并且应该匹配字符串的编码。解决此问题的最简单方法是更改字符串的编码。
original_contents.encode! Encoding::UTF_8
original_contents.gsub(/£/, '')