如何从字符串中删除所有中文字符?

时间:2017-11-02 06:16:38

标签: r string

我正在尝试从以下字符串中删除所有中文字符:

x <- "2.87Y 1282501 12电网MTN4 AAA 4.40 /4.30* 2000、" 

我该怎么做?

4 个答案:

答案 0 :(得分:4)

我去谷歌搜索,发现enter image description here。在查看了一些CJK(中文,日文,韩文)Unicode范围后,我得出的结论是,如果所有字符串都与此特定字符串相似,则需要删除以下Unicode范围。

  • 4E00-9FFF代表CJK统一表意文字
  • 3000-303F用于CJK符号和标点符号

使用gsub(),我们可以

gsub("[\U4E00-\U9FFF\U3000-\U303F]", "", x)
# [1] "2.87Y 1282501 12MTN4 AAA 4.40 /4.30* 2000"

数据:

x <- "2.87Y 1282501 12电网MTN4 AAA 4.40 /4.30* 2000、" 

答案 1 :(得分:3)

您也可以使用iconv执行此操作。这将删除所有非ASCII字符,包括您的中文,日文,韩文等。

iconv(x, "latin1", "ASCII", sub="")
#[1] "2.87Y 1282501 12MTN4 AAA 4.40 /4.30* 2000"

答案 2 :(得分:0)

汉字的 unicode 范围是\ u4E00- \ u9FA5

首先使用re.findall(u'[^\u4E00-\u9FA5]', string)获取字符串中的非中文字符列表,然后扫描字符串并删除该列表中未包含的所有字符。

尝试一下:

import re
def strip_chinese(string):
    en_list = re.findall(u'[^\u4E00-\u9FA5]', string)
    for c in string:
        if c not in en_list:
            string = string.replace(c, '')
    return string

答案 3 :(得分:0)

可以使用unicode块和 stringr 包来完成此操作。 This answer给出了unicode块,有不止一个。

> str_replace_all("先秦兩漢", "[\u2E80-\u2FD5\u3190-\u319f\u3400-\u4DBF\u4E00-\u9FCC\uF900-\uFAAD]", "")
[1] ""