我想捕獲標記內的所有內容以及它後面的下一行,但是假設它在下一次遇到括號時停止。我究竟做錯了什麼?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