我想使用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..
如何告知引擎在每个组项目的结束'或')时停止?
答案 0 :(得分:2)
+
量词是贪婪的,这意味着它会消耗尽可能多的字符。为了使其不贪心,请在其上添加一个问号:\((\d+),0,'(\S+?)'
。