0

これが私の状況です:

re.sub(r'([^\\])', r'\1[\W\1]*', string)

それ自体が文字のグループであるため (それ自体) の後に [\W(itself)] を追加したいのは簡単です (特別な場合があります)。だからこそ、特別な意味をすべて取り除くためにセットに入れる必要があるのです。ただし、私のグループはSETにすることができます。ネストされたセットが機能しないことはわかっています。グループを安全にセットに入れるために角括弧をエスケープ/削除するにはどうすればよいですか?

私の他の試みは、代わりに \1(\W|\1)* を使用することでしたが、グループ内の可能な角括弧をエスケープせずに、グループ内の文字をエスケープする必要があります。どうすればいいですか?

これはジレンマです。この問題を解決する方法と、どちらに進むべきかわかりません。助けてください。

どうもありがとうございました。

編集:ステップをスキップしました。\ ([^\] の部分) の文字を一致させて説明した式に置き換えた後、似たような文字のセットに置き換える必要がある場合があります。つまり、'a' は '[a@]' になり、's' は '[s5$]' になります... 質問は本当に間違っていました。しかし、私は問題を解決したので、私が以前に書いたことからまだ何らかの意味を理解しようとしている場合は、しないでください:)

4

1 に答える 1

2

の代わりに関数を使用できますre.subre.escapeこれにより、置換を実行する前にマッチを呼び出すことができます:

def escape_repl(match):
    return '{0}[\W{0}]*'.format(re.escape(match.group(1)))

re.sub(r'([^\\])', escape_repl, string)

例:

>>> print re.sub(r'([^\\])', escape_repl, '[^$]')
\[[\W\[]*\^[\W\^]*\$[\W\$]*\][\W\]]*

これがあなたがやろうとしていることだと思いますが、あなたの質問からは少し不明確です。これが探しているものでない場合は、いくつかのサンプル文字列と期待される結果を提供してください。

于 2012-08-16T20:07:05.573 に答える