如何用正则表达式一次性移除三重引号间的所有换行符(\n)
正则表达式一次性移除三重引号间的所有换行符
解决方案代码
import re text = ''' ''' <html> <body> <p>Your file successfully uploaded</p> </body> </html> ''' ''' # 一次性完成匹配与替换 processed_text = re.sub(r"(''')([\s\S]*?)(''')", lambda match: match.group(1) + match.group(2).replace('\n', '') + match.group(3), text) print(processed_text)
正则说明
('''):捕获开头的三重引号,作为替换后的前缀([\s\S]*?):非贪婪匹配三重引号之间的所有内容([\s\S]匹配任意字符,包括换行;*?避免匹配到后续的三重引号)('''):捕获结尾的三重引号,作为替换后的后缀- 替换逻辑:通过lambda函数将中间捕获到的内容中的所有
\n移除,再拼接开头、处理后的中间内容、结尾三重引号
原尝试正则的问题
你之前用的re.findall('(?<=\'\'\').+(\\n)+[^\\n]+(?=\'\'\')', text, re.DOTALL)存在两个局限:
+.+(\\n)+[^\\n]+只能匹配包含单个换行的片段,无法覆盖所有连续或分散的换行- 贪婪模式的
+可能会跳过部分内容,无法完整匹配三重引号之间的全部区域
内容的提问来源于stack exchange,提问作者keramat
相关产品推荐
相关产品推荐

