正则表达式用逗号替换数字之间的空格

时间:2015-06-15 13:33:39

标签: regex sublimetext

我在一个大文件中有大量以下内容,其中包含有关世界上每个国家/地区的信息。

它们是温度数据的数组,有时空间的长度不同。

[23.5  26.3  29.3  31.9  32.8  31.2  28.8  27.8  28.4  29  26.6  23.7]

我正在尝试使用sublime来编写正则表达式,但我无法理解它们。

到目前为止,我得到的最接近的是:

( \S+)\(.+ )

如何编写正则表达式来替换该行,如下所示:

[23.8,25.5,27.2,28.3,29.3,29.5,28.7,28.1,28.2,28.9,27.2,24.4]

任何帮助都会非常感谢。

**编辑 我正在使用崇高的文字。

2 个答案:

答案 0 :(得分:2)

只是做:

(\d)\s+(\d)

在替换中:

$1,$2

RegEx Answer

工作原理:

  1. (\d) - 查找数字并将其捕获
  2. \s+ - 后面有一个或多个空格。
  3. (\d) - 然后是另一个数字并捕获它。
  4. 使用这些设置执行“全部替换”会转为:

    [23.5  26.3  29.3  31.9  32.8  31.2  28.8  27.8  28.4  29  26.6  23.7]
    

    分为:

    [23.5,26.3,29.3,31.9,32.8,31.2,28.8,27.8,28.4,29,26.6,23.7]
    

    请注意,如果您的数据文件中有任何其他位置有一个数字后跟一些空白字符后跟另一个受影响的数字。如果发生这种情况,还有其他方法可以改进这一点,但需要查看其余数据的样本。并且,在某些时候,如果有太多的事情发生,在没有影响其他数据的情况下尝试使用单个RegEx解决它可能是不可能的。

答案 1 :(得分:2)

你可以使用这个:(?<=\d)\s+(?=\d|\-),在sublime文本中使用find和replace all。

(?<=\d)是一个积极的外观,它会检查前一个符号是否为数字,而不是实际匹配。

(?=\d)是一个积极的前瞻,同样的事情 - 检查以下符号是否为数字,而不是实际匹配。

仅供参考,javascript不支持lookbehinds,但在这种情况下并不重要。

https://regex101.com/r/qX1qF5/7更容易摆弄它。