1

包含平假名和片假名 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 的两侧?

4

2 回答 2

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
于 2012-09-06T16:13:02.137 回答
0
>>> myPattern = u"[\u3041-\u309f]|[\u30a0-\u30ff]"
>>> print re.sub(myPattern, "", myString)
Eliminate  non-alphabetic  characters
>>> 

编辑您也可以将两个字符类与 OR 运算符结合起来

于 2012-09-06T16:15:49.340 回答