Python 正则表达式如何匹配子字符串而不替换其中的一部分

Python Regex how to match a substring without replace a part of that

我有下面这句话:

sentence = "Work \nExperience \n\n First Experience..."

Work 
Experience 

 First Experience...

所以,我想去掉Work和Experience之间的“\n”,但同时又不想去掉Experience后面的“\n\n”

Work Experience 

First Experience...

我尝试过不同的解决方案,例如:

string = re.sub(" \n{1}[^\n]"," ",sentence)

但是他们都删除了\n(E)之后的第一个字符。

更新:感谢@Wiktor

,我设法找到了解决方案

print(re.sub(r'\w .*?\w+', lambda x: x.group().replace('\n', ''), sentence, flags=re.S))

如果你想让它成为删除任意数量 \n 的通用解决方案,一个换行符,在两个字符串之间,你可以使用

import re
sentence = "Work \nExperience \n\n First Experience..."
print( re.sub(r'Work.*?Experience', lambda x: x.group().replace('\n', ''), sentence, flags=re.S) )

Python demo。输出:

Work Experience 

 First Experience...

Work.*?Experiencere.S 匹配 WorkExperience 之间(包括)的任何子字符串,然后匹配数据对象 (x) 是当使用 .replace('\n', '') 删除所有换行符时,在每次匹配时处理这些修改后的字符串作为替换模式返回到 re.sub.