# 循环遍历每个常数项
for constant in constants:
# 如果常数项前后没有*号,就在前面加上1*
if not (re.search(r'\*{}\b'.format(constant), formula) or re.search(r'\b{}\*'.format(constant), formula)):
formula = re.sub(constant, '1*' + constant, formula)
return formula
a = '10*20+50'
b = add_one_to_constant(a)
print(b)
--------------------------------------
我想要的是比如:
50*50+10,10*65+4+88,9+6,20*60+60,40*9+40,50*5+2*8
展开就是50*50+1*10,10*65+1*4+1*88,1*9+1*6,20*60+1*60,40*9+1*40,50*5+2*8
这些公式的每个常数项左右如果没有*号,就在这个常数项前加"1*",如果公式里的常数项左右都有*号就原样输出,这段代码遇到的问题是如果一个公式里有相同的常数项就出了问题了,相同的常数项会混淆。比如40*9+40 应该输出40*9+1*40,但会原样输出,因为常数项有相同的,它会把后面的40看作第一个40,代码 if not (re.search(r'\*{}\b'.format(constant), formula) or re.search(r'\b{}\*'.format(constant), formula)):,我知道问题,但不知道怎么改。。。有大佬帮忙看看嘛
# 循环遍历每个常数项
for constant in constants:
# 使用 lookahead 和 lookbehind 来判断常数项前后是否有 * 号
formula = re.sub(r'(?<![*\d]){}(?![*\d])'.format(constant), '1*' + constant, formula)
return formula
a = '10*20+50'
b = add_one_to_constant(a)
print(b) # 输出: 10*20+1*50
test = '50*50+10,10*65+4+88,9+6,20*60+60,40*9+40,50*5+2*8'
result = add_one_to_constant(test)
print(result) # 输出: 50*50+1*10,10*65+1*4+1*88,1*9+1*6,20*60+1*60,40*9+1*40,50*5+2*8
# 循环遍历每个常数项
for constant in re.findall(r'\*\d+(?:\.\d+)?\*', formula):
# 如果常数项不在忽略列表中,并且前后没有*号,就在前面加上1*
if constant not in ignores and not (re.search(r'\*{}\b'.format(constant[1:-1]), formula) or re.search(r'\b{}\*'.format(constant[1:-1]), formula)):
formula = re.sub(constant, '*1{}'.format(constant[1:]), formula)
return formula.replace('*', '')
a = '10*20+50'
b = add_one_to_constant(a)
print(b)
# 输出:10*20+*50*
c = '40*9+40'
d = add_one_to_constant(c)
print(d)
# 输出:40*9+1*40