タグ内のすべてとその次の行をキャプチャすると仮定しますが、次回ブラケットを満たしたときに停止すると仮定します。何が間違っているのですか?取得しようとして何イム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
です:!
[( 'TAB1'、「これがキャプチャされた\ Nbutの本があまりにも捕獲することが想定され、\ nは、[これは、このようものの取られるべきです@私を助けて ' '[TAB2]「、' \ n]はコンテンツである\ 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)
これは動作するようですが、それはまた、トリミングていますブラケット内部e内容。
おかげで、私は見、私が実際に再帰を試みたが、あなたは正しい(R?)私はそれを作るための方法を知っていますか?私は何をしようとしていますか? – cybervaldez
Imに問題がありますが、コンテンツ内に括弧がある場合は停止するようです。 どのようにすれば、行の先頭に[括弧]が見つかった場合にのみ停止するようにしますか? [tab1] – cybervaldez
ありがとうございます。この質問は非常に参考になりました。多くの詳細や代替案が登場しました。物事があなたの最初の解決策と実際にどのように違っているかについて私は非常に驚いています。なぜ私の解決策がうまくいかなかったのか、私は考えていません。(^ [\ n \ [] *)、改行の後に括弧があるときにこれを読み止めませんか?それはなぜ機能しないのですか?これは思考のためだけのものであり、あなたの答えはすでに完全に働いています。 – cybervaldez