1

次の Python スクリプト:re.sub("[^a-zA-Z]pi[^a-zA-Z]", "(math.pi)", "2pi3 + supirse")

結果:'(math.pi) + supirse'

前後piの非アルファ文字の一致は重要ですが、これらの非アルファ文字が一致で置き換えられることは望ましくありません。次の出力を確認したいと思います。'2(math.pi)3 + supirse'

注: 以下の以前の提案:re.sub("\Bpi\B", "(math.pi)", "2pi3 + supirse")

すべてのインスタンスが完全に置き換えられます:'2(math.pi)3 + su(math.pi)rse'これも私が探しているものではありません

4

3 に答える 3

5

代わりにこれを使用してください:re.sub("(?<=[^a-zA-Z])pi(?=[^a-zA-Z])", "(math.pi)", "2pi3 + supirse")

視覚化:http://regex101.com/r/fX5wX3

于 2012-08-20T12:36:27.980 に答える
1

先読み/後読みを使用します。

import re

print re.sub("(?<=[^a-zA-Z])pi(?=[^a-zA-Z])", "(math.pi)", "2pi3 + supirse")

具体的な結果については、こちらをご覧ください:http: //ideone.com/rSd8H

于 2012-08-20T12:36:05.937 に答える
0

実際には、単語の境界ではなく、単語の境界意味"\b"する小文字が必要です。"\B"

これを試して:

import re
re.sub(r"\bpi\b", "(math.pi)", "2pi3 + supirse")

それは'2pi3 + supirse'

于 2012-08-20T12:35:05.783 に答える