简单的正则表达式理解问题

时间:2014-01-05 12:43:11

标签: python sql regex

我想使用Python 3.3过滤以下格式的SQL文件(来源:维基百科):

INSERT INTO pagelinks VALUES(10,0,'Computer_accessibility'),(12,0,' - ism'),(12,0,'1848_Revolution'),(12,0, '1917_October_Revolution'),(12,0, '1919_United_States_anarchist_bombings')

INSERT INTO pagelinks VALUES(12,0,'Albert_Camus'),(12,0,'Albert_Libertad'),(12,0,'Albert_Meltzer'),(12,0,' Aleister_Crowley '),(12,0,' Alex_Comfort')

所以基本上你有一行以INSERT语句开头,后面是括号中的内容元组,它们本身用逗号分隔。每行以最后一项的右括号结束。正则表达式一次只能在单行上工作。

我想提取第一个整数(在此示例中为 10 12 )和 UTF-8 字符串,但仅限于条件是第二个整数是0(零)。我使用group()功能使用以下正则表达式...

\((\d+),0,'(\S+)'

...尝试各种其他组合稍作修改。我可以按预期获得所有整数的集合,但是一旦我尝试匹配字符串部分,整个剩余行就成为第二组的匹配。

所以而不是

10 Computer_accessibility
12 -ism

我得到了

10 Computer_accessibility'),(12,0,'-ism'),(etc..

如何告知引擎在每个组项目的结束'')时停止?

1 个答案:

答案 0 :(得分:2)

+量词是贪婪的,这意味着它会消耗尽可能多的字符。为了使其不贪心,请在其上添加一个问号:\((\d+),0,'(\S+?)'