我正试图对一个包含一些特殊字符的文本使用正则表达式,比如à、èo、a等等。
filter_2 = ur'(?:^\|\s+)?(?:(?:main_interests)|(?:influenced)|(?:influences))\s+?=[\s\W]+?(?:[\w}])*?([\d\w\s\-()*–&;\[\]|.<>:/",\']*)(?=\n)'
compiled = re.compile(filter_2, flags=re.U | re.M)
filter_list = re.findall(compiled, information)
下面的案文是对表达式进行评估的结果。
[Pedro Calderón de la Barca连Calderón],[Christian Fürchte歌特Gellert Gellert],[Oliver Goldsmith x Goldsmith],[Hafez],[Johann Gottfried Herder Herder],[荷马],[Kālidā],[Kant],[Friedrich Gottlieb Klopstock Klopstock],[Gotthold Ephraim Lessing Lessing],[Carl Linnaeus x Linnaeus],[詹姆斯·麦克森·麦克弗森],[让·雅克·卢梭·卢梭],[弗里德里希·席勒·席勒],威廉·莎士比亚,莎士比亚[莎士比亚],莎士比亚,[斯马纽尔·埃菲诺伊姆·莱辛·莱辛],[卡尔·林纳乌斯],[詹姆斯·麦克森·麦克弗森],[让·雅克·卢梭·卢梭],[弗里德里希·席勒·席勒],威廉·莎士比亚,莎士比亚[莎士比亚],莎士比亚[斯马纽尔·埃菲诺伊姆·莱辛],罗伯特·斯威德·斯威德·斯威德堡[罗伯特·斯威德沃斯]。2.版本。第1卷:“1764-1786年简讯”。“‘Christian Wegner’”,汉堡,1968年,第709页[Johann Joachim Winckelmann=Winckelmann]
现在,当我试图在上面的文本上使用另一个正则表达式来推断方括号中的单词时,结果是错误的。所有代表一个特殊性质的词语,如àa或èe,都被删除,其结果并不是预期的那样。
filter_6 = ur'(?<=\[\[)([\w\s.-]+)((?=]])|(?=|))'
another_compiled = re.compile(filter_6, flags=re.U | re.M)
another_filtered_list = re.findall(another_compiled, (str(filter_list)))
以下是我的研究结果:
('Pedro Calder',''),('Christian F',''),('Oliver Goldsmith',''),('Hafez',''),‘,''),’‘,(“詹姆斯·麦克弗森”、“”)、“让-雅克·卢梭”、“”、“弗里德里希·席勒”、“”、“威廉·莎士比亚”、(“斯宾诺莎”、“”)、(“伊曼纽尔·斯威登堡”、“”)、(“卡尔·罗伯特·曼德考”、“)、”、“约翰·乔希姆·温克尔曼”、“”、“托马斯·卡莱尔”、“”、“恩斯特·卡西耶”、“查尔斯·达尔文”,‘),('Sigmund Freud',''),('G',''),('Andr',''),('Hermann Hesse',''),('G.W.F. Hegel',''),('Muhammad Iqbal',''),('Daisaku Ikeda',''),('Carl Gustav Jung',’),‘’,‘,’‘,’(“让-巴蒂斯特·拉马克”、“”)、“乔阿金·玛丽亚·马查多·德阿西斯”、“”、“托马斯·曼”、“”(“弗里德里希·尼采”、“”)、“法国前”、“”(“格里戈·罗巴基泽”、“”)、“弗里德里希·席勒”、“奥斯瓦尔德·斯宾格勒”、(“马克斯·斯特纳”、“”)、“弗里德里希·威廉·约瑟夫·谢林”、“弗里德里希·威廉·约瑟夫·谢林”、(“亚瑟叔本华”、“”)、“奥斯瓦尔德·斯宾格勒”、“鲁道夫·施泰纳”、“亨利·大卫·梭罗”、“”(“尼古拉·特斯拉”、“)、”(“伊凡·图根涅夫”、“”)、(“路德维希·维特根斯坦”)、(“理查德·瓦格纳”、“”)、(“利奥波尔德·冯·兰克”、“”)
这些是我想要达到的结果。
比赛1. 1. 2-28
Pedro Calderón de la Barca
比赛2. 1. 43-72Oliver Goldsmith
比赛3. 1. 86-102Oliver Goldsmith
比赛4. 118-123Johann Gottfried Herder
比赛5. 1. 129-152Johann Gottfried Herder
比赛6. 1. 165-170Homer
比赛7. 176-184Kālidāsa
比赛8. 1. 190-194Kant
比赛9. 200-228Friedrich Gottlieb Klopstock
比赛10 . 1. 244-268Gotthold Ephraim Lessing
比赛11 . 282-295Carl Linnaeus
比赛12 1. 310-326Jean-Jacques Rousseau
比赛13 1. 343-364Jean-Jacques Rousseau
比赛14 . 1. 379-397Friedrich Schiller
比赛15 . 412-431William Shakespeare
比赛16 . 449-456Spinoza
比赛17 . 462-480Emanuel Swedenborg
比赛18 1. 501-522Karl Robert Mandelkow
比赛19 1. 659-685Johann Joachim Winckelmann
所有的正则表达式都是在线测试的,它们工作得很完美。有一种方法可以真正包含这些特殊的角色吗?
发布于 2016-08-26 15:56:56
在Python3中,regex不编译。当我改变的时候,这似乎对我起了作用:
filter_6 = ur'(?<=\[\[)([\w\s.-]+)((?=]])|(?=|))'
仅指向unicode (非原始)字符串:
filter_6 = u'(?<=\[\[)([\w\s.-]+)((?=]])|(?=|))'
在Python2中,我认为问题在于将列表转换为字符串。把str(filter_list)
改成' '.join(filter_list)
似乎对我有用。
https://stackoverflow.com/questions/39170123
复制相似问题