Python RegEx用星号表达式替换表达式表示



我正试图在-"在列表前面。例如:

注意:这里的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

最新更新