用9替换所有尾随零的正则表达式

时间:2012-04-23 05:14:51

标签: regex biginteger

我正在尝试实现BigInt减去一个,并希望优化我的代码。现在我只是迭代数字字符串,例如“1241241291919191904124142398623500000000000000”并且为了减去一个,所有尾随的零都需要用9替换。

我如何使用正则表达式执行此操作?

使用正则表达式实现BigInt subtractOne(string)函数的智能方法是什么?它有几个特殊情况。

这是我到目前为止匹配尾随零的原因:

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

2 个答案:

答案 0 :(得分:2)

使用lookahead assertion

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'

答案 1 :(得分: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