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/