0

直前に数字がない場合、文字「t」を削除する必要があるテキスト ファイルがあります。

re.sub を使用してこれを実行しようとしていますが、これがあります。

f=open('File.txt').read()
g=f
g=re.sub('([^0-9])t','',g)

これにより、削除する文字が正しく識別されますが、先行する文字も削除されます。置換文字列で括弧で囲まれた正規表現を参照するにはどうすればよいですか? ありがとう!

4

2 に答える 2

4

代わりに後読み (または否定後読み) を使用してください。

g=re.sub('(?<=[^0-9])t','',g)

また

g=re.sub('(?<![0-9])t','',g)
于 2013-08-14T19:39:27.280 に答える
3

3 つのオプション:

g=re.sub('([^0-9])t','\\1',g)

また

g=re.sub('(?<=[^0-9])t','',g)

また

g=re.sub('(?<![0-9])t','',g)

最初のオプションは、探しているもので、キャプチャされた文字列への後方参照です。\\1最初にキャプチャされたグループを参照します。

ルックアラウンドは文字を消費しないため、元に戻す必要はありません。ここでは、最初のものには肯定的な後読みを使用し、2 番目のものには否定的な後読みを使用しました。これらは括弧内の文字を消費しないため、[^0-9]or[0-9]を置き換えていません。重複一致を防ぐため、それらを使用する方が良いかもしれません。

肯定の後読みは、そのt前に数字以外の文字があることを確認します。負の後読みは、そのt前に数字文字がないことを確認します。

于 2013-08-14T19:39:27.313 に答える