4

BigInt 減算 1 を実装しようとしていますが、コードを最適化したいと考えています。現在、「1241241291919191904124142398623500000000000000」などの数値文字列を反復処理しており、1 を減算するには、末尾のゼロをすべて 9 に置き換える必要があります。

正規表現でこれを行うにはどうすればよいですか?

BigIntのsubtractOne(string)関数を実装するために正規表現を使用するスマートな方法は何ですか? いくつかの特殊なケースがあります。

これは、これまでのところ、末尾のゼロを一致させるために持っているものです:

m = re.search('(?<=[1-9])0+$', '91000')
4

2 に答える 2

2

先読みアサーションを使用します。

import re
s =  "1241241291919191904124142398623500000000000000"
r = re.compile("""0       # Match 0
                  (?=     # only if the following can be matched here:
                   0*     # zero or more 0s
                   $      # until the end of the string.
                  )       # End of lookahead assertion""", re.VERBOSE)

今、あなたはすることができます

>>> r.sub("9", s)
'1241241291919191904124142398623599999999999999'
于 2012-04-23T05:57:58.673 に答える
1

他の可能性は、置換を返す関数を使用することです

import re

def ReplZeros(matchobj):
    return len(matchobj.group(0)) * "9"

text = '1241241291919191904124142398623500000000000000'
res = re.sub(r'0+$', ReplZeros, text)

print text
print res

出力

1241241291919191904124142398623500000000000000 1241241291919191904124142398623599999999999999

于 2012-04-23T06:05:03.750 に答える