使用正则表达式替换Ruby中引号中的所有空格

4 ruby regex

我正在尝试编写一个正则表达式来替换所有未包含在引号中的空格,所以这样的事情:

a = 4, b = 2, c = "space here"
Run Code Online (Sandbox Code Playgroud)

会回来这个:

a=4,b=2,c="space here"
Run Code Online (Sandbox Code Playgroud)

我花了一些时间搜索这个网站,我发现了一个类似的q/a(用空格分割一个字符串 - 保留引用的子串 - 在Python中),它将用一个可以在之后重新替换的标记替换引号内的所有空格擦拭所有其他空间...但我希望有一种更清洁的方式.

Dan*_*wak 8

值得注意的是,任何正则表达式解决方案都会在以下情况下失败:

a = 4, b = 2, c = "space" here"
Run Code Online (Sandbox Code Playgroud)

虽然你可以构建一个regexp来专门处理三引用的情况,但是你无法解决一般意义上的问题.这是简单DFA的数学上可证明的限制,其中正则表达式是直接表示.要执行任何严格的大括号/引号匹配,您将需要更强大的下推自动机,通常采用文本解析器库(ANTLR,Bison,Parsec)的形式.

话虽如此,听起来正则表达式应该足以满足您的需求.请注意这些限制.


Bor*_*gar 5

这似乎有效:

result = string.gsub(/( |(".*?"))/, "\\2")
Run Code Online (Sandbox Code Playgroud)