Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于将所有尾随零替换为九的正则表达式_Regex_Biginteger - Fatal编程技术网

Regex 用于将所有尾随零替换为九的正则表达式

Regex 用于将所有尾随零替换为九的正则表达式,regex,biginteger,Regex,Biginteger,我正在尝试实现BigInt subtract one,并希望优化我的代码。现在我只是迭代数字字符串,例如“1241241291919191904124142398623500000000000000”,为了减去1,所有后面的零都需要替换为9 我该如何使用正则表达式 使用regex实现BigInt subtractOne(string)函数的智能方法是什么?它有几个特殊情况 这是我到目前为止匹配尾随零的结果: m = re.search('(?<=[1-9])0+$', '91000')

我正在尝试实现BigInt subtract one,并希望优化我的代码。现在我只是迭代数字字符串,例如“1241241291919191904124142398623500000000000000”,为了减去1,所有后面的零都需要替换为9

我该如何使用正则表达式

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

这是我到目前为止匹配尾随零的结果:

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

现在你可以做了

>>> r.sub("9", s)
'1241241291919191904124142398623599999999999999'

然后,另一种可能是使用返回替换的函数

import re

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

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

print text
print res
输出

1241291919191904124142398623500000000000000 124124129191919190412414239862359999999999


在本例中,正则表达式的“优化”程度不如仅用“手”从字符串的最后一个字符扫描回第一个非零数字。后面的负数看起来应该像:匹配任意数量的0“并列”结尾,前面有一个非零数字。正则表达式看起来ok@John不需要正向查找,
0+$
将匹配所有尾随的0。问题是正则表达式不能直接用相同数量的9替换它们。您使用的是哪种语言?您知道这是一种有问题的减法方法吗?y是什么时候你要在零串之前减少数字吗?在之前?然后你会得到
10-1=99
。在之后?然后你会得到
290-1=199
。我对@TimPietzcker的答案投了赞成票,但应该注意的是,你所要求的模式只适用于从一个可以被10整除的正数中减去1。而且,我希望你这样做纯粹是为了一个编程练习。你确实知道Python是开箱即用的,对吧?@Kaz:这不是问题。这只是关于如何将所有尾随的零变为九。
import re

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

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

print text
print res