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

6
我正在尝试从以下字符串中删除所有的中文字符:
x <- "2.87Y 1282501 12电网MTN4 AAA 4.40 /4.30* 2000、" 

我该怎么做?
4个回答

6
我进行了搜索,并找到了有关Unicode字符范围的页面。在查看了一些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、" 

4
您也可以使用iconv来实现此操作。这将删除所有非ASCII字符,包括中文、日文、韩文等。
iconv(x, "latin1", "ASCII", sub="")
#[1] "2.87Y 1282501 12MTN4 AAA 4.40 /4.30* 2000"

2

中文字符的 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

请在答案中添加一些描述,解释代码的作用以及为什么编写它。谢谢。 - Tatranskymedved

1
这可以使用 Unicode 块和 stringr 包来完成。这个答案提供了 Unicode 块,不止一个。
> str_replace_all("先秦兩漢", "[\u2E80-\u2FD5\u3190-\u319f\u3400-\u4DBF\u4E00-\u9FCC\uF900-\uFAAD]", "")
[1] ""

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接