我有一个字符串:
q <-"<U+00A6> 1000-66329"
我想删除<U+00A6>
并仅获取1000 66329
。
我尝试使用:
gsub("\u00a6"," ", q,perl=T)
但它并没有删除任何东西。我应该如何gsub
才能获得1000 66329
?
答案 0 :(得分:4)
我只想删除位于字符串开头的unicode
<U+00A6>
。
然后您不需要gsub
,您可以使用sub
"^\\s*<U\\+\\w+>\\s*"
模式:
q <-"<U+00A6> 1000-66329"
sub("^\\s*<U\\+\\w+>\\s*", "", q)
模式详情:
^
- 字符串开头\\s*
- 零个或多个空格<U\\+
- 文字字符序列<U+
\\w+
- 一个或多个字母,数字或下划线>
- 文字>
\\s*
- 零个或多个空格。如果您还需要用空格替换-
,请添加|-
替代方案并使用gsub
(因为现在我们预计会有几个替换,并且替换必须是空格 - 同样是在akrun's answer):
trimws(gsub("^\\s*<U\\+\\w+>|-", " ", q))
答案 1 :(得分:2)
如果始终是第一个字符,您可以尝试:
substring("\U00A6 1000-66B29", 2)
如果R将字符串打印为<U+00A6> 1000-66329
而不是¦ 1000-66B29
,则<U+00A6>
将被解释为字符串"<U+00A6>"
而不是unicode字符。然后你可以这样做:
substring("<U+00A6> 1000-66329",9)
结果的两种方式都是:
[1] " 1000-66329"
答案 2 :(得分:2)
我们也可以
trimws(gsub("\\S+\\s+|-", " ", q))
#[1] "1000 66329"
答案 3 :(得分:1)
而不是删除你应该将它转换为适当的格式......你必须将你的本地设置为UTF-8,如下所示:
Sys.setlocale("LC_CTYPE", "en_US.UTF-8")
也许您会看到以下消息:
Warning message:
In Sys.setlocale("LC_CTYPE", "en_US.UTF-8") :
OS reports request to set locale to "en_US.UTF-8" cannot be honored
在这种情况下,您应该使用stringi::stri_trans_general(x, "zh")
这里“zh”的意思是“中国人”。您应该知道必须转换为哪种语言。就是这样