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

时间:2014-09-20 04:58:57

标签: python regex python-2.7 unicode

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

import re
add = u"埼玉県川口市金山町12丁目1-104番地"

test = re.search(ur'["番地"|"丁目"]',add)
print test.group(0)

丁

我可以使用re.findall代替re.search,但它会将所有结果放入元组中,因此我必须解析元组。如果这是最好的方式,我可以忍受它,但我想我错过了什么。

在上面的示例中,我想用短划线交换“丁目”并删除尾随的“番地”,以便地址如下:

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

1 个答案:

答案 0 :(得分:5)

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

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

>>> import re
>>> add = u"埼玉県川口市金山町12丁目1-104番地"
>>> test = re.search(ur'番地|丁目', add)
>>> test.group(0)
u'\u4e01\u76ee'
>>> print test.group(0)
丁目

要获得所需内容,请使用str.replaceunicode.repalce)和re.sub

>>> print re.sub(u'番地$', u'', add.replace(u'丁目', u'-'))
埼玉県川口市金山町12-1-104

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

>>> print re.sub(u'番地$', u'', add.replace(u'丁目', u'-'))
埼玉県川口市金山町12-1-104