Python正则表达式仅匹配部分括号

Python正则表达式仅匹配部分括号,python,regex,Python,Regex,我有一些格式不好的文本需要过滤。因此,在很多情况下,文本中的引用从一行开始,然后在第二行结束。在这种情况下,我倾向于完全删除部分引号,但我希望保留常规的完整引号。我知道这可以用计数器迭代完成,但我更喜欢用正则表达式 例如: "This is a quote" This is an end "partial- quote" Here is more text. This is an end "partial- quote w/o more text" This is an "embedded" q

我有一些格式不好的文本需要过滤。因此,在很多情况下,文本中的引用从一行开始,然后在第二行结束。在这种情况下,我倾向于完全删除部分引号,但我希望保留常规的完整引号。我知道这可以用计数器迭代完成,但我更喜欢用正则表达式

例如:

"This is a quote" This is an end "partial- quote" Here is more text. This is an end "partial- quote w/o more text" This is an "embedded" quote (稍后我会处理空白)

给你

^((?:[^"\n]*"[^"\n]*")*[^"\n]*)"[^"\n]*\n[^"\n]*"(\n|)
将匹配的字符替换为
\1\n

如果要处理双引号之间的多行,请使用此正则表达式

^((?:[^"\n]*"[^"\n]*")*[^"\n]*)"(?:[^"\n]*\n)+[^"\n]*"(\n|)

您或许可以使用以下正则表达式:

"[^"\n]+?\n[^"\n]+?(?:"|$)\s*
并替换为
\n

“[^”\n]+?\n[^”\n]+?
将只匹配部分引号(确保引号之间有换行符)

你可以试试这个。这也将考虑奇数引号的情况。请参阅演示


对不起,我刚开始玩弄这个。有没有可能让它不依赖于收盘报价?也就是说,这行不通:哦,它有奇数个双引号……这是不可能的。编辑:没关系。我想你真的不知道它是哪一部分。谢谢!如果你不依赖收盘报价,那么你怎么知道哪个报价结束了?@andoni我想这会对缺少的双引号有效。也许你可以看看我建议的正则表达式?@andoni你也可以用奇数的
试试
^((?:[^"\n]*"[^"\n]*")*[^"\n]*)"(?:[^"\n]*\n)+[^"\n]*"(\n|)
"[^"\n]+?\n[^"\n]+?(?:"|$)\s*
("[^"\n]*")|"[^"]*(\n)[^"]*"(?![^\n]*")|"[^"]*\n.*?(?=\n[^"]*"[^\n"]*")