如何从字符串中删除 unicode <U+00A6>?

How to remove unicode <U+00A6> from string?

我有一个像这样的字符串:

q <-"<U+00A6>  1000-66329"

我想删除 <U+00A6> 并只获取 1000 66329

我尝试使用:

gsub("\u00a6"," ", q,perl=T)

但它没有删除任何内容。我应该如何gsub才能得到1000 66329

如果always是第一个字符,可以试试:

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"

I just want to remove unicode <U+00A6> which is at the beginning of string.

那么你不需要 gsub,你可以使用 sub"^\s*<U\+\w+>\s*" 模式:

q <-"<U+00A6>  1000-66329"
sub("^\s*<U\+\w+>\s*", "", q)

图案详情:

  • ^ - 字符串开头
  • \s* - 零个或多个白色spaces
  • <U\+ - 文字字符序列 <U+
  • \w+ - 1 个或多个字母、数字或下划线
  • > - 文字 >
  • \s* - 零个或多个白色spaces.

如果您还需要将 - 替换为 space,请添加 |- 替代项并使用 gsub(因为现在我们希望有多个替换项并且替换项必须成为 space - ):

trimws(gsub("^\s*<U\+\w+>|-", " ", q))

R online demo

与其删除,不如将其转换为适当的格式...您必须像这样将本地设置为 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"表示"chinese"。您应该知道必须转换成哪种语言。就是这样