用于多行搜索/替换的Python正则表达式。 变化:
x a
x b
分为:
y a
y b
但是,只有当有两行以x开头时
答案 0 :(得分:2)
您可以使用Python的groupby
函数,如下所示:
from itertools import groupby
text = """x a
x b
x c
a b
x d
a b
x 123
x 234
x 345
a b
x a
x b"""
for k, g in groupby(text.split('\n'), lambda x: x.startswith('x')):
lines = list(g)
if k and len(lines) >= 2:
lines = ['y' + line[1:] for line in lines]
print '\n'.join(lines)
这将显示以下内容:
y a
y b
y c
a b
x d
a b
y 123
y 234
y 345
a b
y a
y b
使用Python 2.7.9进行测试
答案 1 :(得分:0)
使用re.findall
和re.sub
:
def replace(text):
regex = re.compile(r'(?m)^x')
if len(regex.findall(text)) > 1:
return regex.sub('y', text)
return text
text = '''foobar
x a
c
xa b
e
xx c
a b
x d
a b
x 123
e
x 234
x 345
ax b
x a
x b
x a
e
'''
print replace(text)
输出:
foobar
y a
c
ya b
e
yx c
a b
y d
a b
y 123
e
y 234
y 345
ax b
y a
y b
y a
e
和
>>> print replace('x')
x
>>> print replace('xa')
xa
>>> print replace('xaxcxc')
xaxcxc
>>> print replace('xa\nxcxc')
ya
ycxc
>>> print replace('axa\nxc\nxc')
axa
yc
yc
>>> print replace('xa\nxc\nxc')
ya
yc
yc