我必须擦洗很多日文地址。这个正则表达式适用于两个正则表达式测试站点,但我在Windows终端上没有得到相同的结果;我在Windows 7上使用Python 2.7.8。
以下是pythonregex.com的结果:
string = "北海道札幌市西区二十四軒1条7丁目"
regex = re.compile("(.{2,3}?[県|道|府|都]{1})?((?:.+?市.+?区)|(?:.+?郡.+?町)|(?:.+?[市|区|町|村]))?([^0-9]+)?([0-9]+)?(?:[-|-]([0-9-]+))?")
r = regex.search(string)
r
<_sre.SRE_Match object at 0x350aeaba58a52420>
regex.match(string)
<_sre.SRE_Match object at 0x350aeaba58a524e8>
# List the groups found
r.groups()
(u'\u5317\u6d77\u9053', u'\u672d\u5e4c\u5e02\u897f\u533a',u'\u4e8c\u5341\u56db\u8ed2\uff11\u6761\uff17\u4e01\u76ee', None, None)
这恰当地给了我三组:
北海道
札幌市西区
二十四軒1条7丁目
但在我的终端上,相同的代码产生了这个:
regex = re.compile("(.{2,3}?[県|道|府|都]{1})?((?:.+?市.+?区)|(?:.+?郡.+?町)|(?:.+?[市|町|村]))?([^0-9]+)?([0-9]+)?(?:[-|-]([0-9-]+))?")
r = regex.search(string)
r
<_sre.SRE_Match object at 0x00000000020FED20>
r.groups()
(None, '\x96k\x8aC\x93\xb9\x8eD\x96y\x8es\x90\xbc\x8b\xe6','\x93\xf1\x8f\\\x8el\x8c\xac\x82P\x8f\xf0\x82V\x92\x9a\x96\xda', None, None)
这给了我没有匹配的第一组,并将第二组和第三组混为一谈。然而,在2个不同的Python正则表达式测试站点上,我得到了期望的结果(地址分为3个单独的字符串)。我的终端有什么问题?
谢谢。
答案 0 :(得分:1)
可能你需要在脚本标题上添加编码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
http://legacy.python.org/dev/peps/pep-0263/
如果它不起作用,你应该尝试将字符串定义为unicode字符串:
u"I'm a string"
如果它仍然不起作用,请尝试将日语汉字字符替换为它们的unicode代码点。
u"\u23ef"
更多相关信息: https://docs.python.org/2/tutorial/introduction.html#unicode-strings
答案 1 :(得分:0)
您需要在将输入字符串分配给变量时添加u
,以便python将其作为unicode字符串,并且还需要在正则表达式编译代码中包含re.UNICODE
修饰符。
>>> string = u"北海道札幌市西区二十四軒1条7丁目"
>>> regex = re.compile(u"(.{2,3}?[県|道|府|都]{1})?((?:.+?市.+?区)|(?:.+?郡.+?町)|(?:.+?[市|町|村]))?([^0-9]+)?([0-9]+)?(?:[-|-]([0-9-]+))?", re.UNICODE)
>>> r = regex.search(string)
>>> r
<_sre.SRE_Match object at 0x7f1e45714dd8>
>>> r.groups()
(u'\u5317\u6d77\u9053', u'\u672d\u5e4c\u5e02\u897f\u533a', u'\u4e8c\u5341\u56db\u8ed2\uff11\u6761\uff17\u4e01\u76ee', None, None)