Python如何仅删除字符串中双引号包裹内容内的换行符
错误原因分析
你之前写的正则r'"\\n"'只能匹配到"\n"这种完全由双引号包裹单个换行符的内容,无法匹配双引号内部夹杂在普通文本之间的换行符,因此没有效果。
完整实现代码
首先你拿到的output_data是bytes类型,需要先解码为字符串再做正则处理:
import re # 1. 将bytes转为字符串,编码可根据实际情况调整为gbk等 raw_text = output_data.decode("utf-8") # 2. 替换所有双引号内部的换行符 def replace_newline_in_quote(match): # 取双引号包裹的内容,删除所有\n后再拼回双引号返回 content_without_nl = match.group(1).replace("\n", "") # 如果你的文本里的\n是转义字符串(即显示为\\n),把上面的"\n"换成"\\n"即可 return f'"{content_without_nl}"' processed_text = re.sub(r'"(.*?)"', replace_newline_in_quote, raw_text, flags=re.DOTALL) # 如果处理后需要转回bytes,执行下面的代码 # processed_bytes = processed_text.encode("utf-8")
逻辑说明
- 正则
r'"(.*?)"加re.DOTALL标记,可以匹配到所有成对双引号包裹的内容,.*?是非贪婪匹配,避免跨多对双引号匹配。 - 每次匹配到双引号内容后,回调函数会仅对双引号内部的内容做换行符删除操作,不影响引号外的内容。
内容的提问来源于stack exchange,提问作者Chicken Sandwich No Pickles
相关产品推荐
相关产品推荐

