Python字符串替换需求:将*依次替换为递增编号的(1)(2)...
问题分析
你的代码存在几个关键问题:
- 循环逻辑错误:
for asterisco in asterisco:实际是遍历单个字符*,整个循环只执行一次,根本没法逐个处理所有星号。 string.replace()是全局替换,一次就把所有*换成(1),后续的numero +=1完全没机会生效。- 变量
numero在循环内部每次都重置为1,就算循环能多次执行,编号也不会递增。
解决方案
下面提供两种实用的实现方式:
方法一:用正则回调实现逐个替换
借助re.sub的回调函数特性,每次匹配到*时自动生成递增编号:
import re def notes(string): count = 1 def replace_match(match): nonlocal count res = f"({count})" count += 1 return res return re.sub(r"\*", replace_match, string) # 测试示例 print(notes("This is a note *; and this is another note *")) print(notes("hola*** "))
运行输出:
This is a note (1); and this is another note (2) hola(1)(2)(3)
方法二:手动遍历字符串构建结果
如果不想依赖正则,直接逐个字符遍历处理:
def notes(string): output = [] count = 1 for char in string: if char == "*": output.append(f"({count})") count += 1 else: output.append(char) return ''.join(output) # 测试示例 print(notes("This is a note *; and this is another note *")) print(notes("hola*** "))
输出结果和方法一完全一致。
内容的提问来源于stack exchange,提问作者Joana
相关产品推荐
相关产品推荐

