我想捕获标记内的所有内容以及它后面的下一行,但是假设它在下一次遇到括号时停止。我究竟做错了什么?python中的我的正则表达式没有正确地递归
import re #regex
regex = re.compile(r"""
^ # Must start in a newline first
\[\b(.*)\b\] # Get what's enclosed in brackets
\n # only capture bracket if a newline is next
(\b(?:.|\s)*(?!\[)) # should read: anyword that doesn't precede a bracket
""", re.MULTILINE | re.VERBOSE)
haystack = """
[tab1]
this is captured
but this is suppose to be captured too!
@[this should be taken though as this is in the content]
[tab2]
help me
write a better RE
"""
m = regex.findall(haystack)
print m
什么IM试图得到的是:
[( 'TAB1',“这是捕获\ n但这个是假设过于捕获\ n @这应当理解,虽然,因为这!在内容] \ n”, '[TAB2]', '帮我\ Nwrite这更好的RE \ n')]
编辑:
regex = re.compile(r"""
^ # Must start in a newline first
\[(.*?)\] # Get what's enclosed in brackets
\n # only capture bracket if a newline is next
([^\[]*) # stop reading at opening bracket
""", re.MULTILINE | re.VERBOSE)
这似乎工作,但它也修整括号内内容。
感谢您的答复,我看,我确实尝试了递归(R?),但你说的没错它不是真正的工作在Python中,所以你知道一种方式让我做到这一点,我可以实现我想做的事情? – cybervaldez 2009-06-05 09:29:40
我有一个问题,它似乎停止时,也有一个括号内的支架。 我该如何做到这一点,只有当它仅在行的开始处找到[括号]时才会停止。 [tab1] – cybervaldez 2009-06-06 11:40:19
谢谢,我的这个问题已经很丰富,因为很多细节和选择已经出现。对于事情与你的第一个解决方案有什么不同,我感到非常惊讶。我不知道为什么我的解决方案无法正常工作:(^ [\ n \ [] *),如果在换行符之后有一个[括号]为什么它不起作用?这仅仅是为了思考,你的答案已经很完美了。 – cybervaldez 2009-06-07 00:41:35