java - 我可以使用正则表达式删除 "any whitespace that is not between quotes"吗?

标签 java regex string removing-whitespace

Regex string matching everything not wrapped 涵盖了检索不同分隔符之外的字符的任务,但是是否可以对相等的分隔符执行相同的操作?

换句话说,我知道正则表达式可以匹配两个不同字符的分隔符之间的文本(即 >< ),但是可以匹配不同的文本 em> 位于两个相等的分隔符之间(即 "" )。

示例:

之前:

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

删除引号之间的空格后:

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

到目前为止,this is the only regex I've hacked together that does anything similar at all ,但即便如此,它并没有完成所有的事情,而且我确信我错过了一些事情:

/(\s+?(?={))|(^\s+)|(\r|\n)|((?=[\[:,])\s+)/gm

最佳答案

是的,想法是:匹配一个空格,后跟任意数量的 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(?=("[^"]*"|[^"])*$)

也应该在那里工作。

关于java - 我可以使用正则表达式删除 "any whitespace that is not between quotes"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25250553/

相关文章:

php - 使用 PHP 字符串将电子邮件替换为 Base64 编码的 ID

string - 将字符串解释为 Fortran 中的变量名

c - C中多维数组中的字符串

java - 无法从另一个 Maven 子项目调用 Hibernate/QueryDSL

java - 为什么我的程序无法读取使用同一程序创建的文件?

java - 如何使用java检查字符串中的所有字符是否为小写

SQL REGEX 搜索表名

string - 如何格式化字符串以用作 MATLAB 中的结构字段名称?

EC2 中的 Java 安装

java - java 日期格式化程序中的行为不一致