我正试图在-"在列表前面。例如:
注意:这里的V表示我的列表项的开始和结束的标识符。(因为列表是长文本的一部分(。
V
Apple
Banana
Orange fruit
V
至
V
- Apple
- Banana
- Orange fruit
V
我通过做这个来匹配列表
Vn([A-Za-z]+( [A-Za-z]+)*)rn(([A-Za-z]+( [A-Za-z]+)*rn)*)nV
但我对重置价值有意见。我在想这种方法
V- 1n- 2nV
但这只会在第一个项目上进行缩进,基本上会删除列表的其余部分。类似这样的东西:
V
- Apple
-
V
我正在使用re.sub,BTW
你可以做:
import re
txt='''
Y
dog
Y
V
Apple
Banana
Orange fruit
V'''
def rfunc(m):
return m.group(1)+'n'.join([f'- {l}' for l in m.group(2).splitlines()])+m.group(3)
print(
re.sub(r'(^V$n)([sS]*?)(n^V$)', rfunc, txt, flags=re.M)
)
打印:
Y
dog
Y
V
- Apple
- Banana
- Orange fruit
V
您可以使用替换函数:
import re
s = 'VnApplenBanananOrange fruitnV'
r = re.sub('(?<=n)[a-zA-Z]{1}', lambda x:v if (v:=x.group()) == 'V' else f'-{v}', s)
print(r)
输出:
V
-Apple
-Banana
-Orange fruit
V