Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-regex-排序日语地址_Python_Regex - Fatal编程技术网

Python-regex-排序日语地址

Python-regex-排序日语地址,python,regex,Python,Regex,我得删除很多日语地址。这个正则表达式在两个正则表达式测试站点上工作,但是我在我的Windows终端上没有得到相同的结果;我正在Windows7上使用Python 2.7.8 以下是pythonregex.com的结果: string = "北海道札幌市西区二十四軒1条7丁目" regex = re.compile("(.{2,3}?[県|道|府|都]{1})?((?:.+?市.+?区)|(?:.+?郡.+?町)|(?:.+?[市|区|町|村]))?([^0-9]+)?([0-9]+)?(?:[-

我得删除很多日语地址。这个正则表达式在两个正则表达式测试站点上工作,但是我在我的Windows终端上没有得到相同的结果;我正在Windows7上使用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)
但在我的终端上,相同的代码会产生以下结果:

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)
regex=re.compile((.{2,3})[県|道|府|都]{1})?((?:.+?市.+?区)|(?:.+?郡.+?町)|(?:.+?[市|町|村]))?([^0-9]+)?([0-9]+)?(?:[-|-]([0-9-]+))?")
r=regex.search(字符串)
R
r、 组()
(无,'\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',无,无)
这使我没有匹配的第一组,并将第二组和第三组集中在一起。然而,在两个不同的Python正则表达式测试站点上,我得到了期望的结果(地址被分成3个单独的字符串)。我的终端出了什么问题


谢谢。

您可能需要在脚本头上添加编码:

#!/usr/bin/python
# -*- coding: utf-8 -*-

如果不起作用,则应尝试将字符串定义为unicode字符串:

u"I'm a string"
如果仍然不起作用,尝试用日文汉字字符替换unicode代码点

u"\u23ef" 
有关这方面的更多信息:

将输入字符串赋给变量时,需要添加
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)
>>字符串=u”北海道札幌市西区二十四軒1条7丁目"
>>>regex=re.compile(u“(.{2,3})[県|道|府|都]{1})?((?:.+?市.+?区)|(?:.+?郡.+?町)|(?:.+?[市|町|村]))?([^0-9]+)([0-9]+)(?:[-]([0-9-]+)?”,关于UNICODE)
>>>r=regex.search(字符串)
>>>r
>>>r.团体()
(u'\u5317\u6d77\u9053',u'\u672d\u5e4c\u5e02\u897f\u533a',u'\u4e8c\u5341\u56db\u8ed2\uff11\u6761\uff17\u4e01\u76ee',无,无)

好的,我在这里试试。最终结果不能是Unicode,所以我必须在最终产品中删除它,但至少在测试中我会使用Unicode。我会尝试。最终产品不能是Unicode,所以我最终必须删除它,但为了测试它,我可以使用Unicode。@Tensigh最后你可以使用
str.decode('utf-8')
,用您选择的变量替换
str
,以摆脱编码。@Tensigh“不能使用Unicode”是什么意思“?代码本身还是应用程序?因为这是两件不同的事情…@Lester,如果我不清楚,很抱歉。最终输出文件不能使用Unicode。我正在转换的文件会上载到一个只接受Shift JIS编码的网站。如果我可以切换到Unicode,你不知道这项任务会变得多么容易。”(更不用说Unicode是标准化的!)我明白了,但是如果你把Shift-JIS解码成unicode字符串,然后进行计算,然后编码成Shift-JIS是不可接受的?或者更具体地说,如果你把Shift-JIS编码的字节解码成unicode字符串,然后立即将其转换回来,不会产生相同的字节序列?我的意思是,我对这些字符表差异的看法是:utf-8,Shift-JIS,ascii,无论我们如何在磁盘和数据库中存储数据,unicode是我们在内存中处理数据的方式……我注意到,在第一位代码中,您调用了
regex.match(string)
,而在第二位代码中,您没有调用。这可能与此有关。
>>> 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)