Java 我可以使用正则表达式来删除“";任何不在引号之间的空白;?

Java 我可以使用正则表达式来删除“";任何不在引号之间的空白;?,java,regex,string,removing-whitespace,Java,Regex,String,Removing Whitespace,介绍了检索不同分隔符之外的字符的任务,但是是否可以对相同的分隔符执行相同的操作? 换句话说,我知道正则表达式可以匹配两个不同字符分隔符之间的文本(即和是的,其思想是:匹配一个空格,后跟任意数量的1)带引号的字符串或2)不带引号的字符串 python中的示例: import re text = """ { "my key name": "my key value", "foo": ["b a r", "b a z"] } """ rx = r"""(?x) \s

介绍了检索不同分隔符之外的字符的任务,但是是否可以对相同的分隔符执行相同的操作?


换句话说,我知道正则表达式可以匹配两个不同字符分隔符之间的文本(即
是的,其思想是:匹配一个空格,后跟任意数量的1)带引号的字符串或2)不带引号的字符串

python中的示例:

import re

text = """
{ "my key name":
      "my key value",
"foo": ["b a r", "b a z"]  }
"""

rx = r"""(?x)
    \s
    (?=
        (
            " [^"]* "
            |
            [^"]
        ) *
        $
    )
"""

print re.sub(rx, '', text)
# {"my key name":"my key value","foo":["b a r","b a z"]}
我看到java标签被添加了。。。我不懂java,但上面正则表达式的可移植形式

\s(?=("[^"]*"|[^"])*$)

应该也适用。

是的,想法是:匹配一个空格,后跟任意数量的1)带引号的字符串或2)不带引号的字符串,直到结尾

python中的示例:

import re

text = """
{ "my key name":
      "my key value",
"foo": ["b a r", "b a z"]  }
"""

rx = r"""(?x)
    \s
    (?=
        (
            " [^"]* "
            |
            [^"]
        ) *
        $
    )
"""

print re.sub(rx, '', text)
# {"my key name":"my key value","foo":["b a r","b a z"]}
我看到java标签被添加了。。。我不懂java,但上面正则表达式的可移植形式

\s(?=("[^"]*"|[^"])*$)

也应该在那里工作。

您可以这样做(使用点所有修饰符,或在正则表达式的开头插入(?s)
查找:

替换:

$1
输出:

{"my key name":"my key value","foo":["bar","baz"]}
扩大

   # ("[^"\\]*(?:\\.[^"\\]*)*")|(\s+)

   (                             # (1 start)
        "
        [^"\\]* 
        (?: \\ . [^"\\]* )*
        "
   )                             # (1 end)
|  
   ( \s+ )                       # (2)

您可以这样做(使用点所有修饰符,或在正则表达式的开头插入(?s)
查找:

替换:

$1
输出:

{"my key name":"my key value","foo":["bar","baz"]}
扩大

   # ("[^"\\]*(?:\\.[^"\\]*)*")|(\s+)

   (                             # (1 start)
        "
        [^"\\]* 
        (?: \\ . [^"\\]* )*
        "
   )                             # (1 end)
|  
   ( \s+ )                       # (2)


那么它不起作用了吗?您使用的是什么语言?如果您的代码无法正常工作,请解释它在哪些方面存在缺陷。您拥有的是一个普通的JSON对象。@user3218114 Yes,Java@ScottHunter例如,在我链接的refidle中,它不会删除冒号或逗号后的空格。那么它不起作用了吗?您使用的是什么语言?如果您的代码无法正常工作,请解释它在哪些方面存在缺陷。您拥有的是一个普通的JSON对象。@user3218114 Yes,Java@ScottHunter例如,在我链接的refidle中,它不会删除冒号或逗号后的空格。这非常优雅!我喜欢!真是太优雅了!我喜欢!OP正在寻找Java语言中的正则表达式。为什么只考虑双引号。它适用于任何不相等的分隔符吗?@user3218114只要正则表达式解析器足够相似,我就可以将解决方案改编成另一种语言。此外,这里只有双引号,但是可以通过使用其他字符替换正则表达式的引号来轻松更改。这是一个紧凑的好主意。不会在空白处添加
+
量词吗
\s+(?=
…如果有几个空格,它应该只替换一个吗?@Jonny5:在这种情况下(只需删除ws)-是的,
+
是个好主意。OP正在寻找Java语言中的正则表达式。为什么只考虑双引号。它对任何不相等的分隔符都有效吗?@user3218114只要正则表达式解析器足够相似,我就可以将解决方案改编为另一种语言。此外,这里只有双引号,但可以通过替换正则表达式轻松地进行更改x的引号加上一些其他字符这是一个紧凑的好主意。不会在空白处添加
+
量词吗?
\s+(?=
…或者如果有几个空格,它应该只替换一个空格吗?@Jonny5:在这种情况下(只需删除ws)-是的,
+
是一个好主意。