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.*?Experience
和 re.S
匹配 Work
和 Experience
之间(包括)的任何子字符串,然后匹配数据对象 (x
) 是当使用 .replace('\n', '')
删除所有换行符时,在每次匹配时处理这些修改后的字符串作为替换模式返回到 re.sub
.
我有下面这句话:
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.*?Experience
和 re.S
匹配 Work
和 Experience
之间(包括)的任何子字符串,然后匹配数据对象 (x
) 是当使用 .replace('\n', '')
删除所有换行符时,在每次匹配时处理这些修改后的字符串作为替换模式返回到 re.sub
.