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

Lit*_*les 1 python regex unicode

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

myString = u"Eliminate ???? non-alphabetic ???? characters"
Run Code Online (Sandbox Code Playgroud)

根据以下内容匹配两个范围的模式:http: //www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml

myPattern = u"[\u3041-\u309f]*|[\u30a0-\u30ff]*"
Run Code Online (Sandbox Code Playgroud)

简单的Python正则表达式替换功能

import re
print re.sub(myPattern, "", myString)
Run Code Online (Sandbox Code Playgroud)

返回:

Eliminate  non-alphabetic ???? characters
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 5

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

myPattern = u"[\u3041-\u309f\u30a0-\u30ff]*"
Run Code Online (Sandbox Code Playgroud)

演示:

>>> myPattern = u"[\u3041-\u309f\u30a0-\u30ff]*"
>>> print re.sub(myPattern, "", u"Eliminate ???? non-alphabetic ???? characters")
Eliminate  non-alphabetic  characters
Run Code Online (Sandbox Code Playgroud)