如何测试是否" \ u"是否包含在unicode Python字符串中?

时间:2016-03-30 23:33:06

标签: regex string

我有一个unicode字符串列表。我想测试是否" \ u"是每个字符串元素中的子字符串,以便针对特定情况采取行动,如何实现这一目标?

我是用Python编程的。我在Python中使用日语到英语的dict,我打算将每个字符串中的日语替换为相应的英语单词。

在下面的例子中,\ u819c确实对应一个日文字符,\ u539a对应另一个日文字符,它们一起成为日文单词。我有一个字典,将这个单词映射到英语,现在我要替换 " \ u819c \ u539a"用英文单词。因为日语和英语是混合的,我想要做的是首先确定它是纯粹的asii字符串还是unicode字符串。这就是为什么我要检查" \ u"在字符串中

[u'\u819c\u539a_act', u'wild\u5e45', u'Hello_world', u'hello']

我希望答案是

True, True, False, False

1 个答案:

答案 0 :(得分:0)

您可以做的最简单的事情是将每个字符串视为Unicode字符串,并查看字符串是否包含Unicode代码点超过您选择的某个值的字符。请考虑以下Java代码:

public static void main(String[] args) {
    char[] c1 = new char[]{'\'', '\u819c', '\u539a', '\u0061', 'a'};
    String[] strs = new String[]{new String(c1)};
    for (String s : strs) {
       s.codePoints().forEach(System.out::println);
    }
}

在这里,我从您使用的字符串中选择了某些字符。运行此程序打印:

39
33180
21402
97
97

请注意,第四个和第五个字符相同,但一个字符表示为unicode sequence。你会认为字符“a”表示为\u0061“Unicode字符”吗?理想情况下,您应该,因为每个字符都有一个Unicode代码点。但话又说回来,你应该做什么取决于你的要求。

第二和第三个角色是你似乎对识别感兴趣的东西。并且您想知道字符串是否包含这样的字符(可能是中文字符)。如果您正在寻找,那么您应该参考Unicode规范,找出您想要识别的字符(或其范围)的代码点,并按照您需要的方式处理包含它们的字符串。

因此,在上面的代码中你做了类似

的事情
       s.codePoints().filter(c -> c > 4296).forEach(System.out::println);

你可以过滤掉非中文字符,产生输出:

33180
21402