0

私はPython正規表現の初心者なので、我慢してください...

長い複数行の文字列があり、[[...]]文字列のディレクトリ部分を他のものに置き換える必要がありますが、「file://」で始まらない場合に限ります。たとえば、

    s= 'chk1 [[file:///excursions/digital/MindMaps/|mm]],
    local file [[file:///inFolder/tmptest/a/fan.txt|a/fan.txt]]
    and nonlocal [[/excursions/books/calsync.txt|/excursions/books]]'

私はこれのバリエーションを使用しました(現時点では、置換文字列は私が見つけたものの単なるチェックです):

re.sub('\[\[(?!file:)(^])*',"found:< \\1 >",s)

しかし、「sre_constants.error:unmatchedgroup」が表示されます。私が間違っていることを知っていますか?

ありがとう!

アレッサンドロ

4

2 に答える 2

1

[]2番目のグループに演算子がありません:

'\[\[(?!file:)(^])*

する必要があります

'\[\[(?!file:)([^\]]*)'

エスケープが多い場合は、生の文字列を使用することもお勧めします。

re.sub(r'\[\[(?!file:)([^\]]*)', r"found:<\1>", s)
于 2012-05-16T08:25:07.157 に答える
0

エスケープが原因で角かっこが一致していません

于 2012-05-16T08:22:52.357 に答える