【发布时间】:2020-11-24 18:47:31
【问题描述】:
我使用这篇文章作为这个问题的参考 - How do I regex remove whitespace and newlines from a text, except for when they are in a json's string?
我在 java 程序中有以下字符串:
"stuff\n blah\n--payload {'meh': 'kar\n'}"
我正在寻找一个正则表达式来替换整个字符串中的换行符,但 JSON 字符串中的换行符除外。我期待的结果是:
"stuff blah --payload {'meh': 'kar\n'}"
该帖子中引用的正则表达式在大多数情况下都可以正常工作,但也会替换 JSON 字符串中的 \n。我得到的最终结果是:
"stuff blah --payload {'meh': 'kar'}"
我一直在尝试以下一组正则表达式:
^("[^"]*(?:""[^"]*)*")(\n+) // I expected this to be a combination of newline and newline not within double quotes
[\n\r]\s* //Match new lines, and then could possibly negate it to be within double quotes?
但我似乎仍然无法获得不会忽略 JSON 值字符串中的换行符的用例。有没有可能的解决方案?
【问题讨论】:
-
"Parsing" JSON with regex... 不会那么好用。除非您确定 JSON 将在
--payload之后,否则您会遇到一些麻烦,在这种情况下,分两块执行此操作:处理 JSON 有效负载之前的位,然后处理之后的位(可能会忽略它),然后将两个块重新组合在一起。 -
换句话说,你让问题变得更难了。
-
使用解析器,而不是正则表达式。这是唯一的方法。
-
为什么不先排除 JSON(例如,删除以
{开头并以}结尾的字符串),然后删除剩余字符串中的换行符。正如@DaveNewton 所写,将其作为一个字符串处理会使事情变得过于复杂。 -
好点。我可以使用匹配器来删除 JSON 字符串部分,然后从剩余的字符串中完全去除换行符。