Python绕过正则表达式零宽度的方法

时间:2014-07-21 17:20:24

标签: python regex

我想知道是否有办法解决这个问题。我有这种字符串,只想提取出大学的名字。

我的理想模式如下,但我知道后视镜是零宽度。

idealpattern = (?<=\d+)\s+[A-Za-z ]{5,20}?(?=[A-Z][A-Z])

我也可以从后视镜中取出\ d,然后移除数字,但我想知道是否有办法用后视来消除这一步。

altpattern = \d+\s+[A-Za-z ]{5,20}?(?=[A-Z][A-Z])

解决此问题的常用方法有哪些?

  

商务人员和Commonfund Institute。美国和加拿大   2013财年上市机构市值和市场价值   从2012财年到2013财年,捐赠市场价值的变化* *注意:   市场价值的变化并不代表市场的回报率   机构投资。相反,市场价值的变化   2012财年至2013财年的捐赠额反映了以下方面的净影响:   1)提取资金用于机构运营和资本支出;   2)支付养老金管理和投资费用; 3)   捐赠者捐赠和其他捐助的补充;和4)   投资收益或损失。排名机构州/省2013   捐赠基金($ 000s)2012年捐赠基金($ 000)*市场变化   价值(%)1哈佛大学硕士学位32,334,293 30,435,375 6.2 2耶鲁大学   University CT 20,780,000 19,345,000 7.4 3德克萨斯大学系统   TX 20,448,313 18,263,850 12.0 4斯坦福大学CA 18,688,868   17,035,804 9.7 5普林斯顿大学新泽西州18,200,433 16,954,128 7.4 6

1 个答案:

答案 0 :(得分:0)

你真的需要使用外观吗?这对我有用:

re.findall(r"\d+\s+([A-Za-z ]{5,}?) [A-Z][A-Z]", subject)

输出:

Harvard University
Yale University
University of Texas System
Stanford University
Princeton University

换句话说,使用一组来捕捉您真正感兴趣的部分。 Lookbehinds是正则表达式功能列表的一个非常晚的补充,这不是它们要解决的问题。

(请注意,我也利用了Python的findall()方法仅返回捕获组的内容这一事实。当你期待它时它是一个很好的功能,但是它往往会让人感到意外。)