为什么这个Python RegEx管道没有选择两个unicode范围?

时间:2012-09-06 16:08:35

标签: python regex unicode

包含平假名和片假名unicode字符的示例字符串:

myString = u"Eliminate ひらがな non-alphabetic カタカナ characters"

符合两个范围的模式,根据: http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml

myPattern = u"[\u3041-\u309f]*|[\u30a0-\u30ff]*"

简单的Python正则表达式替换函数

import re
print re.sub(myPattern, "", myString)

返回:

Eliminate  non-alphabetic カタカナ characters

我能让它发挥作用的唯一方法就是我分别使用两个范围,一个接一个。什么阻止此RegEx简单地选择| -pipe的两侧?

2 个答案:

答案 0 :(得分:5)

您需要将范围组合成一个字符类,否则它将匹配一个或另一个范围,而不是两者:

myPattern = u"[\u3041-\u309f\u30a0-\u30ff]*"

演示:

>>> myPattern = u"[\u3041-\u309f\u30a0-\u30ff]*"
>>> print re.sub(myPattern, "", u"Eliminate ひらがな non-alphabetic カタカナ characters")
Eliminate  non-alphabetic  characters

答案 1 :(得分:0)

>>> myPattern = u"[\u3041-\u309f]|[\u30a0-\u30ff]"
>>> print re.sub(myPattern, "", myString)
Eliminate  non-alphabetic  characters
>>> 

编辑您可以将两个字符类与OR运算符组合在一起