我有一个字符串,比如:
q <-"<U+00A6> 1000-66329"
我想删除<U+00A6>
,只获取1000 66329
。
我尝试使用:
gsub("u00a6"," ", q,perl=T)
但它并没有消除任何东西。我应该如何执行gsub
才能只获得1000 66329
?
我只想删除字符串开头的unicode
<U+00A6>
。
那么你不需要gsub
,你可以使用sub
和"^\s*<U\+\w+>\s*"
模式:
q <-"<U+00A6> 1000-66329"
sub("^\s*<U\+\w+>\s*", "", q)
图案详细信息:
^
-字符串的开头\s*
-零个或多个空白<U\+
-一个文字字符序列<U+
\w+
-1个或多个字母、数字或下划线>
-文字>
\s*
-零个或多个空白
如果您还需要用空格替换-
,请添加|-
替代项并使用gsub
(因为现在我们预计会有几个替换项,并且替换项必须是空格-这与akrun的答案相同(:
trimws(gsub("^\s*<U\+\w+>|-", " ", q))
请参阅R在线演示
如果始终是第一个字符,您可以尝试:
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"
我们也可以进行
trimws(gsub("\S+\s+|-", " ", q))
#[1] "1000 66329"
与其删除,不如将其转换为适当的格式。。。您必须将本地设置为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"的意思是"中国人"。你应该知道你必须转换成哪种语言。这就是