Python - 带日文字母的正则表达式只匹配一个字符

Ten*_*igh 1 python regex unicode python-2.7

我试图在日语地址中找到某些单词,以便我可以擦除它们.如果只有一个字符,正则表达式工作正常,但它们似乎找不到2个字符或更多的字符串:

import re
add = u"????????????????????"

test = re.search(ur'["??"|"??"]',add)
print test.group(0)

?
Run Code Online (Sandbox Code Playgroud)

我可以使用re.findall而不是re.search,但它将所有的发现放入一个元组,所以我必须解析元组.如果这是最好的方式,我可以忍受它,但我想我错过了一些东西.

在上面的例子中,我想用短划线交换"丁目"并删除尾随的"番地",以便地址如此读取:

埼玉県川口市金山町12-1-104

fal*_*tru 5

你在|字符类([....])中使用.它将匹配那里列出的任何字符; 这不是你想要的.

指定没有字符类的模式.(也没有")

>>> import re
>>> add = u"????????????????????"
>>> test = re.search(ur'??|??', add)
>>> test.group(0)
u'\u4e01\u76ee'
>>> print test.group(0)
??
Run Code Online (Sandbox Code Playgroud)

要获得你想要的东西,请使用str.replace(unicode.repalce)和re.sub.

>>> print re.sub(u'??$', u'', add.replace(u'??', u'?'))
?????????????????
Run Code Online (Sandbox Code Playgroud)

$用于仅匹配字符串的末尾.如果位置??$无关紧要,则不需要正则表达式.str.replace足够:

>>> print re.sub(u'??$', u'', add.replace(u'??', u'?'))
?????????????????
Run Code Online (Sandbox Code Playgroud)