如何用Python正确处理长文本换行:替换单个\r\n为空格保留多换行
Python 处理长文本:替换单个\r\n为空格,保留连续换行
需求很明确:把文本里单个出现的\r\n替换成空格,但两个及以上的连续\r\n要原封不动保留。用正则表达式是最高效的方式,这里给你拆解清楚怎么写:
核心正则表达式
用这个正则就能精准匹配孤立的单个\r\n:
(?<!\r\n)\r\n(?!\r\n)
拆解下每个部分的作用:
(?<!\r\n):反向否定断言——确保当前要匹配的\r\n前面没有另一个\r\n\r\n:就是我们要找的单个换行序列(?!\r\n):正向否定断言——确保当前要匹配的\r\n后面也没有另一个\r\n
这样一来,只有前后都不是换行的单个\r\n会被选中,连续换行里的每一个\r\n都不会被匹配到。
完整代码示例
直接套到你的文本上:
import re text = "The 44th Chess Olympiad was an international\r\nteam chess event organised by the International Chess Federation (FIDE)\r\nin Chennai, India from 28 July to 10 August 2022.\r\n\r\nIt consisted of Open and Women's\r\ntournaments, as well as\r\nseveral events to promote chess.\r\n\r\nThe Olympiad was initially supposed to take place\r\nin Khanty-Mansiysk, Russia,\r\nthe host of the Chess World Cup 2019,\r\nin August 2020, but it was later moved to Moscow.\r\n\r\nHowever, it was postponed due to the COVID-19 pandemic\r\nand then relocated to Chennai." # 执行替换 processed_text = re.sub(r'(?<!\r\n)\r\n(?!\r\n)', ' ', text) # 输出结果 print(processed_text)
运行后,原来单个换行的地方会变成空格(比如"international"和"team"之间),而段落之间的\r\n\r\n会完整保留,刚好符合你的要求。
扩展提示
如果你的文本里可能混合了\n(不带\r的换行),可以把正则改成兼容两种格式的版本:
(?<!\r?\n)\r?\n(?!\r?\n)
这样不管是\r\n还是\n,单个的都会被替换,连续的依然保留。
内容的提问来源于stack exchange,提问作者mrgou
相关产品推荐
相关产品推荐

