0

テキストの一部が次のように区切られているテキストがあります。

{# xxx #} some text {# zzz #}

私のテキスト全体で、このパターンの多くの出現があります。some text区切り文字からを抽出したいと思います。正規表現でこれを行うにはどうすればよいですか?

たとえば、次のテキストがあるとします。

Lorem Ipsum は、印刷および植字業界の単なるダミー テキストです。Lorem Ipsum は 1500 年代以来、業界標準のダミー テキストでした。未知の印刷業者が活字のギャレーを取り、{# xxx #} をスクランブルして {# zzz #} を活字見本にしました。それは 5 世紀だけでなく、電子植字への飛躍にも耐え、本質的に変わっていません。1960 年代に {# xxx #}、{# zzz #} Lorem Ipsum のパッセージを含む Letraset シートがリリースされ、最近では {# xxx #} Aldus PageMaker {# zzz #} のバージョンを含むデスクトップ パブリッシング ソフトウェアで普及しました。ロレム・イプサム。

次のようなリストを取得したいと思います。

[it to make, with, desktop publishing software like Aldus PageMaker]

これが私の非動作コードです:

>>> regex = re.compile(r'{# xxx #}.*({# zzz #}).*?')

>>> re.findall(regex, s) {# zzz #}

私の困難は、貪欲でない方法で正規表現を作成しようとしていると思いますか?

4

1 に答える 1

2

?区切り文字の間に追加するだけで、貪欲でない動作を得ることができます。また、最後に持ってはいけません.*?。それは何もしません。{}は特殊文字であり、おそらくエスケープする必要があります。最後に、一致させたい部分を括弧で囲む必要があります。これにより、次のパターンが得られます。

 regex = re.compile(r'\{# xxx #\}(.*?)\{# zzz #\}')

m = re.matchそれを使用するには、 のようなものを使用し、次に使用m.group(1)して最初のサブグループ (括弧内の部分) を取得するループが必要です。findallサブグループの最後の一致しか取得できないためではなく、ループを使用する必要があります。

于 2013-03-08T11:44:48.033 に答える