Python正则表达式可匹配单引号中的文本,而忽略转义的引号(和制表符/换行符)
给定一个文本文件,我要匹配的字符用单引号分隔,但可能有零个或一个转义的单引号,以及零个或多个制表符和换行符(不转义)-我想匹配仅文字。例:
menu_item = 'casserole';
menu_item = 'meat
loaf';
menu_item = 'Tony\'s magic pizza';
menu_item = 'hamburger';
menu_item = 'Dave\'s famous pizza';
menu_item = 'Dave\'s lesser-known
gyro';
我只想获取文本(和空格),而忽略制表符/换行符,并且实际上并不关心转义引号是否出现在结果中,只要它不影响匹配项即可:
casserole
meat loaf
Tonys magic pizza
hamburger
Daves famous pizza
Dave\'s lesser-known gyro # quote is okay if necessary.
我设法创建了一个 几乎可以 做到的正则表达式-它可以处理转义的引号,但不能处理换行符:
menuPat = r"menu_item = \'(.*)(\\\')?(\t|\n)*(.*)\'"
for line in inFP.readlines():
m = re.search(menuPat, line)
if m is not None:
print m.group()
肯定有大量的正则表达式问题-
但是大多数正使用Perl,如果有一个可以满足我的要求,我就无法弄清楚:)而且由于我使用的是Python,所以我不在乎如果分布在多个组中,则很容易对其进行重组。
一些答案说只与用于解析文本的代码一起使用。虽然我确定我 可以 做到这一点-我非常 接近 能正常使用的正则表达式:)而且似乎 应该 可行。
更新:我刚刚意识到我正在做一个Python readlines()
来获取每一行,这显然正在破坏传递给正则表达式的行。我正在寻找重新编写它的方法,但是对此部分的任何建议也将非常有帮助。