Issue 14068: problem with re split (original) (raw)

Created on 2012-02-21 02:52 by harveyang, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
news1.xml harveyang,2012-02-21 04:15
Messages (10)
msg153837 - (view) Author: harvey yang (harveyang) Date: 2012-02-21 02:56
i use python to handle some string. here is my code: # -*- coding: utf-8 -*- from lxml import etree import collectcorpus import re doc = etree.parse("/home/harveyang/workspace/corpus/newsscrapy/news1.xml") root = doc.getroot() children = root.getchildren() flag = 1 for child in children: if flag == len(children): content = child.find("content").text pattern = re.compile('。') sentences = re.split(pattern, content) print "*********************" for s in sentences: print s print "**********************" # collectcorpus.collectCorpusFromString(content) flag = flag + 1 when i use re split it print that: ********************* 南澳大利亚,这里的每一寸土地,都是那么的温柔与清新。阿德莱德、芭萝莎、袋鼠岛……你真正面对它们时,总会有种难以名状的美好——那连绵的山峰、起伏的山谷、葱郁的牧场、飘香的田园、平静的湖泊还有那4800公里的海滩,定会让你的梦想在这里启程!南澳大利亚州是澳大利亚面积第四大州,也被称为“节日之州”。它是澳大利亚大陆唯一1个与所有的州和领地接壤的州,首府位于阿德莱德。阿德莱德街景【阿德莱德】阿德莱德(Adelaide)可以说是一座“爱情之城”。因为最初的命名便是威廉四世由他的妻子的名字而得来。阿德莱德对于长期生活在北京、上海这样动辄上千万人口的城市来说,真的一点也不算大。但对于只有160万人口的南澳,能拥有其四分之三人口的比重,在当地人看来已经是非常了不起的事了。但俗话说,麻雀虽小,却五脏俱全。阿德莱德在城市规划以及便民设计上却相当的令人称赞。市区免费巴士市中心有免费得巴士及轻轨可供市民出行使用,大街上随处可见的引用自来水管,干净且便捷。还有遍布市区的草坪绿地,无论你是散步或是运动,都会是一种绝佳的享受。这里的城市规划不仅实用,还挺有意思:市政府规定,只需在城中心建造商业区,而出了很小范围的中心后,是不允许建造高楼的,主要目的就是保护市民的居住环境不必受损。而同样,市民也很乐于居住在郊外,理由同样很简单:“舒服”。阿德莱德大学阿德莱德大学是该市最著名的学校,位于市中心城市图书馆附近。它是一所开放式大学,没有围墙,没有保安,任何人都可以在其中感受学术的氛围。这座城市虽然历史并非多么久远,但他们非常重视保护历史遗迹,无论是旧图书馆还是宴会厅,都保留着古老的建筑。甚至在山上还存有被烧毁的木楼,以来警示后人。阿德莱德著名的商业街在阿城有一条街值得一提,它叫Rundle mall,是这个城市的商业中心,白天熙熙攘攘的人群川流不息,各类时尚品牌尽在其中,和它相连接的一条是亨德利街Hindle St,这里集酒吧,餐馆,咖啡馆于一体,是夜生活集中区域。纵观这座依山傍水的城市,真不愧为澳大利亚最优美、最有格调的城,它的天然美景与优雅气质,绝对让人一见倾心。上一页12345下一页转发此文至微博【新浪旅游声明】本文未经授权许可,任何单位及个人不得转载、摘编或以其它方式使用。 ********************** done! when i switch to use str split, it print that: ********************* 南澳大利亚,这里的每一寸土地,都是那么的温柔与清新 阿德莱德、芭萝莎、袋鼠岛……你真正面对它们时,总会有种难以名状的美好——那连绵的山峰、起伏的山谷、葱郁的牧场、飘香的田园、平静的湖泊还有那4800公里的海滩,定会让你的梦想在这里启程!南澳大利亚州是澳大利亚面积第四大州,也被称为“节日之州” 它是澳大利亚大陆唯一1个与所有的州和领地接壤的州,首府位于阿德莱德 阿德莱德街景【阿德莱德】阿德莱德(Adelaide)可以说是一座“爱情之城” 因为最初的命名便是威廉四世由他的妻子的名字而得来 阿德莱德对于长期生活在北京、上海这样动辄上千万人口的城市来说,真的一点也不算大 但对于只有160万人口的南澳,能拥有其四分之三人口的比重,在当地人看来已经是非常了不起的事了 但俗话说,麻雀虽小,却五脏俱全 阿德莱德在城市规划以及便民设计上却相当的令人称赞 市区免费巴士市中心有免费得巴士及轻轨可供市民出行使用,大街上随处可见的引用自来水管,干净且便捷 还有遍布市区的草坪绿地,无论你是散步或是运动,都会是一种绝佳的享受 这里的城市规划不仅实用,还挺有意思:市政府规定,只需在城中心建造商业区,而出了很小范围的中心后,是不允许建造高楼的,主要目的就是保护市民的居住环境不必受损 而同样,市民也很乐于居住在郊外,理由同样很简单:“舒服” 阿德莱德大学阿德莱德大学是该市最著名的学校,位于市中心城市图书馆附近 它是一所开放式大学,没有围墙,没有保安,任何人都可以在其中感受学术的氛围 这座城市虽然历史并非多么久远,但他们非常重视保护历史遗迹,无论是旧图书馆还是宴会厅,都保留着古老的建筑 甚至在山上还存有被烧毁的木楼,以来警示后人 阿德莱德著名的商业街在阿城有一条街值得一提,它叫Rundle mall,是这个城市的商业中心,白天熙熙攘攘的人群川流不息,各类时尚品牌尽在其中,和它相连接的一条是亨德利街Hindle St,这里集酒吧,餐馆,咖啡馆于一体,是夜生活集中区域 纵观这座依山傍水的城市,真不愧为澳大利亚最优美、最有格调的城,它的天然美景与优雅气质,绝对让人一见倾心 上一页12345下一页转发此文至微博【新浪旅游声明】本文未经授权许可,任何单位及个人不得转载、摘编或以其它方式使用 ********************** done! it means that re's split does not work!!
msg153838 - (view) Author: harvey yang (harveyang) Date: 2012-02-21 02:58
i use python to handle some string. here is my code: # -*- coding: utf-8 -*- from lxml import etree import collectcorpus import re doc = etree.parse("news1.xml") root = doc.getroot() children = root.getchildren() flag = 1 for child in children: if flag == len(children): content = child.find("content").text pattern = re.compile('。') sentences = re.split(pattern, content) print "*********************" for s in sentences: print s print "**********************" # collectcorpus.collectCorpusFromString(content) flag = flag + 1 when i use re split it print that: ********************* 南澳大利亚,这里的每一寸土地,都是那么的温柔与清新。阿德莱德、芭萝莎、袋鼠岛……你真正面对它们时,总会有种难以名状的美好——那连绵的山峰、起伏的山谷、葱郁的牧场、飘香的田园、平静的湖泊还有那4800公里的海滩,定会让你的梦想在这里启程!南澳大利亚州是澳大利亚面积第四大州,也被称为“节日之州”。它是澳大利亚大陆唯一1个与所有的州和领地接壤的州,首府位于阿德莱德。阿德莱德街景【阿德莱德】阿德莱德(Adelaide)可以说是一座“爱情之城”。因为最初的命名便是威廉四世由他的妻子的名字而得来。阿德莱德对于长期生活在北京、上海这样动辄上千万人口的城市来说,真的一点也不算大。但对于只有160万人口的南澳,能拥有其四分之三人口的比重,在当地人看来已经是非常了不起的事了。但俗话说,麻雀虽小,却五脏俱全。阿德莱德在城市规划以及便民设计上却相当的令人称赞。市区免费巴士市中心有免费得巴士及轻轨可供市民出行使用,大街上随处可见的引用自来水管,干净且便捷。还有遍布市区的草坪绿地,无论你是散步或是运动,都会是一种绝佳的享受。这里的城市规划不仅实用,还挺有意思:市政府规定,只需在城中心建造商业区,而出了很小范围的中心后,是不允许建造高楼的,主要目的就是保护市民的居住环境不必受损。而同样,市民也很乐于居住在郊外,理由同样很简单:“舒服”。阿德莱德大学阿德莱德大学是该市最著名的学校,位于市中心城市图书馆附近。它是一所开放式大学,没有围墙,没有保安,任何人都可以在其中感受学术的氛围。这座城市虽然历史并非多么久远,但他们非常重视保护历史遗迹,无论是旧图书馆还是宴会厅,都保留着古老的建筑。甚至在山上还存有被烧毁的木楼,以来警示后人。阿德莱德著名的商业街在阿城有一条街值得一提,它叫Rundle mall,是这个城市的商业中心,白天熙熙攘攘的人群川流不息,各类时尚品牌尽在其中,和它相连接的一条是亨德利街Hindle St,这里集酒吧,餐馆,咖啡馆于一体,是夜生活集中区域。纵观这座依山傍水的城市,真不愧为澳大利亚最优美、最有格调的城,它的天然美景与优雅气质,绝对让人一见倾心。 ********************** done! when i switch to use str split, it print that: ********************* 南澳大利亚,这里的每一寸土地,都是那么的温柔与清新 阿德莱德、芭萝莎、袋鼠岛……你真正面对它们时,总会有种难以名状的美好——那连绵的山峰、起伏的山谷、葱郁的牧场、飘香的田园、平静的湖泊还有那4800公里的海滩,定会让你的梦想在这里启程!南澳大利亚州是澳大利亚面积第四大州,也被称为“节日之州” 它是澳大利亚大陆唯一1个与所有的州和领地接壤的州,首府位于阿德莱德 阿德莱德街景【阿德莱德】阿德莱德(Adelaide)可以说是一座“爱情之城” 因为最初的命名便是威廉四世由他的妻子的名字而得来 阿德莱德对于长期生活在北京、上海这样动辄上千万人口的城市来说,真的一点也不算大 但对于只有160万人口的南澳,能拥有其四分之三人口的比重,在当地人看来已经是非常了不起的事了 但俗话说,麻雀虽小,却五脏俱全 阿德莱德在城市规划以及便民设计上却相当的令人称赞 市区免费巴士市中心有免费得巴士及轻轨可供市民出行使用,大街上随处可见的引用自来水管,干净且便捷 还有遍布市区的草坪绿地,无论你是散步或是运动,都会是一种绝佳的享受 这里的城市规划不仅实用,还挺有意思:市政府规定,只需在城中心建造商业区,而出了很小范围的中心后,是不允许建造高楼的,主要目的就是保护市民的居住环境不必受损 而同样,市民也很乐于居住在郊外,理由同样很简单:“舒服” 阿德莱德大学阿德莱德大学是该市最著名的学校,位于市中心城市图书馆附近 它是一所开放式大学,没有围墙,没有保安,任何人都可以在其中感受学术的氛围 这座城市虽然历史并非多么久远,但他们非常重视保护历史遗迹,无论是旧图书馆还是宴会厅,都保留着古老的建筑 甚至在山上还存有被烧毁的木楼,以来警示后人 阿德莱德著名的商业街在阿城有一条街值得一提,它叫Rundle mall,是这个城市的商业中心,白天熙熙攘攘的人群川流不息,各类时尚品牌尽在其中,和它相连接的一条是亨德利街Hindle St,这里集酒吧,餐馆,咖啡馆于一体,是夜生活集中区域 纵观这座依山傍水的城市,真不愧为澳大利亚最优美、最有格调的城,它的天然美景与优雅气质,绝对让人一见倾心 ********************** done! it means that re's split does not work!!
msg153844 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2012-02-21 03:52
Can you paste (or upload) a minimal working example (with a short sample string) that uses re.split and str.split and shows how re.split is failing?
msg153846 - (view) Author: harvey yang (harveyang) Date: 2012-02-21 04:15
sure,here is an simple string from the news1.xml
msg153863 - (view) Author: Ramchandra Apte (Ramchandra Apte) * Date: 2012-02-21 10:11
启朗.杨, are you using text.split() in the second case? text.split() splits on any whitespace character including newlines while re.split(text," ") splits on a space.
msg153864 - (view) Author: harvey yang (harveyang) Date: 2012-02-21 10:18
i am not use it to split whitespace or newline. i use it to split Chinese full stop. and the result is showed at the earlier message.
msg153865 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2012-02-21 10:28
When you used str split, you had to use a unicode string: content.split(u'。') It's the same with re.split: when I use pattern = re.compile('。') nothing is split, it works much better with: pattern = re.compile(u'。')
msg153867 - (view) Author: Ramchandra Apte (Ramchandra Apte) * Date: 2012-02-21 10:50
The problem is not in re, it is because you are passing '。' to re.split which in Python 2.x is actually passed as '\xe3\x80\x82'. You should pass u'。' to re.compile. Could we raise a SyntaxError when in a progam a unicode character is in a bytes string? Python 3 does so; it raises "SyntaxError: bytes can only contain ASCII literal characters." when you execute b'。'
msg153919 - (view) Author: harvey yang (harveyang) Date: 2012-02-22 01:51
i see. thanks :)
msg153921 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2012-02-22 02:01
As long as you don't mix str and unicode everything works. With strings: >>> s = '与清新。阿德莱' >>> re.split('。', s) ['\xe4\xb8\x8e\xe6\xb8\x85\xe6\x96\xb0', '\xe9\x98\xbf\xe5\xbe\xb7\xe8\x8e\xb1'] >>> s.split('。') ['\xe4\xb8\x8e\xe6\xb8\x85\xe6\x96\xb0', '\xe9\x98\xbf\xe5\xbe\xb7\xe8\x8e\xb1'] With unicode: >>> u = u'与清新。阿德莱' >>> re.split(u'。', u) [u'\u4e0e\u6e05\u65b0', u'\u963f\u5fb7\u83b1'] >>> u.split(u'。') [u'\u4e0e\u6e05\u65b0', u'\u963f\u5fb7\u83b1'] Mixing str and unicode: >>> re.split(u'。', s) ['\xe4\xb8\x8e\xe6\xb8\x85\xe6\x96\xb0\xe3\x80\x82\xe9\x98\xbf\xe5\xbe\xb7\xe8\x8e\xb1'] >>> re.split('。', u) [u'\u4e0e\u6e05\u65b0\u3002\u963f\u5fb7\u83b1'] >>> >>> s.split(u'。') Traceback (most recent call last): File "", line 1, in UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) >>> u.split('。') Traceback (most recent call last): File "", line 1, in UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128) The syntax error is raised for byte literals and can't be backported to 2.7. Raising an error when str and unicode are mixed in re is not backward compatible, and re does work as long as both are ASCII only. I'm therefore closing this as invalid.
History
Date User Action Args
2022-04-11 14:57:26 admin set github: 58276
2012-02-22 02:01:12 ezio.melotti set status: open -> closednosy: + mrabarnettmessages: + resolution: not a bugstage: resolved
2012-02-22 01:51:34 harveyang set messages: +
2012-02-21 10:50:35 Ramchandra Apte set messages: +
2012-02-21 10:28:08 amaury.forgeotdarc set nosy: + amaury.forgeotdarcmessages: +
2012-02-21 10🔞26 harveyang set messages: +
2012-02-21 10:11:33 Ramchandra Apte set nosy: + Ramchandra Aptemessages: +
2012-02-21 04:15:55 harveyang set files: + news1.xmlmessages: +
2012-02-21 03:52:42 ezio.melotti set messages: +
2012-02-21 02:58:52 harveyang set messages: +
2012-02-21 02:56:35 harveyang set type: behaviortitle: problem with re -> problem with re splitcomponents: + Regular Expressionsnosy: + ezio.melottiversions: + Python 2.7messages: +
2012-02-21 02:52:03 harveyang create