如何用纯正则实现多行字符串每行开头动态插入不同字符,无需切片
纯正则实现方案
核心思路是配合re.MULTILINE模式匹配非空行的行首位置,用迭代器按顺序注入要插入的字符,完全不需要对原字符串做切片处理:
import re m = """ 0 1 2 3 4 5 1 0 1 2 3 4 2 1 1 2 3 4 """ insert_chars = "bip" # 构造字符迭代器,按顺序取字符 char_iter = iter(insert_chars) result = re.sub( pattern=r'^(?=[^\n])', # 匹配行首,且行首后不是换行符(排除空行) repl=lambda match: f"{next(char_iter)} ", string=m, flags=re.MULTILINE ) print(result)
原理说明
- 正则
^(?=[^\n])中,^在re.MULTILINE模式下会匹配每一行的开头位置,正向预查(?=[^\n])会过滤掉行首后紧跟换行符的空行(比如示例原字符串最开头的空行位置),刚好匹配到3个有内容的行首位置 - 替换函数用迭代器按顺序取要插入的字符,刚好符合已知的「行数和插入字符数相等」的前提
- 原字符串末尾的换行符不会被修改,不需要额外做
m[:-1]切片处理
内容的提问来源于stack exchange,提问作者cards
相关产品推荐
相关产品推荐

