给定一个文本文件,我想匹配的字符用单引号分隔,但可能有零个或一个转义的单引号,报价,以及零个或多个制表符和换行符(不转义) - 我只想匹配文本。例如: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()来获得每一行,这显然是分裂线传递给正则表达式。我正在考虑重新编写它,但任何有关该部分的建议也会非常有帮助。
可能重复的,用于管理转义字符项目像字符串文字](http://stackoverflow.com/questions/430759/regex-for-managing-escaped-characters-for-items-like-string-literals) – phooji 2011-03-27 22:28:45
不是重复 - 我试图处理(非转义的)换行符也打破了我的输入数据。 – 2011-03-27 22:30:52
我同意,但我认为无论如何都值得指出。只需使用're.MULTILINE'(http://docs.python.org/library/re.html#re.MULTILINE)匹配多行,'$'忽略/匹配endlines和'\ s'(相同的链接)匹配新闻空间。出来,蚱蜢;) – phooji 2011-03-27 22:47:44