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

标签 ruby regex

我正在尝试编写一个正则表达式来替换所有未包含在引号中的空格,如下所示:

a = 4, b = 2, c = "space here"

会返回这个:

a=4,b=2,c="space here"

我花了一些时间搜索这个网站,我发现了一个类似的 q/a ( Split a string by spaces -- preserving quoted substrings -- in Python ),它将用一个标记替换引号内的所有空格,可以在删除所有其他空格后重新替换...但我希望有一种更清洁的方法。

最佳答案

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

a = 4, b = 2, c = "space" here"

虽然您确实可以构造一个正则表达式来专门处理三引号的情况,但您无法解决一般意义上的问题。这是简单 DFAs 的数学可证明限制,其中正则表达式是直接表示。要执行任何严肃的大括号/引号匹配,您将需要更强大的 pushdown automaton ,通常以文本解析器库(ANTLR、Bison、Parsec)的形式出现。

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

关于ruby - 使用正则表达式替换 Ruby 中不在引号中的所有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/205521/

相关文章:

ruby-on-rails - Rails has_many 与多个键关联

Ruby 字符串 to_f... 错误?

ruby - 没有类/过程/对象的脚本的 RDoc

php - 在 PHP 中拆分嵌套括号的正确方法,例如 "root[one[a,b,c],two[d,e,f]]"到数组?

AEM 调度程序中的正则表达式表达式格式不同

Python 用户输入作为正则表达式,如何正确执行?

ruby-on-rails - Ruby/Rails - 更改时间的时区,而不更改值

ruby-on-rails - 多进程VS多线程服务器最受益于什么?

regex - 通过正则表达式限制文本中的行数

javascript - 正则表达式匹配的奇怪行为