0

ダンプからのテキストのサンプルは -

s='[[Pierre-Joseph Proudhon|Proudhon]], [[Peter Kropotkin|Kropotkin]], [[Mikhail Bakunin|Bakunin]]'

次のように指定された正規表現を実行すると-

match_internal=re.findall('\[\[(.+)\]\]',s)
for i in match_internal:
    print i
>>Pierre-Joseph Proudhon|Proudhon]], [[Peter Kropotkin|Kropotkin]], [[Mikhail Bakunin|Bakunin

印刷ではなく

Pierre-Joseph Proudhon|Proudhon
Peter Kropotkin|Kropotkin
Mikhail Bakunin|Bakunin
4

2 に答える 2

4

貪欲なものの代わりに消極的な量指定子を使用する必要があります: -

re.findall('\[\[(.+?)\]\]',s)  // Replaced `.+` with `.+?`

貪欲な量指定子(パターン)を使用すると(.+)、最後まですべての文字列に一致し、消極的な量指定子(パターン)を使用すると、最初の文字列で停止します。]](.+?)]]

>>> match_internal=re.findall('\[\[(.+?)\]\]',s)
>>> for i in match_internal:
        print i

Pierre-Joseph Proudhon|Proudhon
Peter Kropotkin|Kropotkin
Mikhail Bakunin|Bakunin
于 2013-01-17T09:48:20.263 に答える
1

デフォルトでは、+量指定子は可能な限り一致します。そして、.文字列内のすべての文字に一致するため、最も外側の括弧のみを除いて、一致するのは 1 つだけです。

次のように、括弧内の「非括弧」文字を検索する必要があります。

re.findall('\[\[([^\]]+)\]\]', s)
于 2013-01-17T09:50:35.553 に答える