正则表达式,用于在分号前匹配前两个数字

时间:2018-03-18 12:42:33

标签: regex

我的字符串如下:

-9.853418333333334 35.020405 0.0 0.0;-9.854273333333333 35.02038 0.0 0.0;-9.85452 35.01970166666667 0.0 0.0;-9.854205 35.019618333333334 0.0 0.0;-9.853418333333334 35.020405 0.0 0.0;

我希望使用正则表达式来匹配每个分号前面的分号和前两个数字和空格,这样我就可以用逗号和这样的空格替换它们。

-9.853418333333334 35.020405, -9.854273333333333 35.02038, -9.85452 35.01970166666667, -9.854205 35.019618333333334, -9.853418333333334 35.020405,

如果分号前面的所有两个数字总是0.0,我就不会费心去使用正则表达式了,但遗憾的是,有时它们会更复杂,如下所示:

-10.134578333333334 34.945479999999996 1433.7 2.5;-10.134636666666667 34.94678 1455.4 2.1;-10.133980000000001 34.946913333333335 1457.5 2.2;-10.133958333333334 34.945555 1434.8 2.1;-10.134578333333334 34.945479999999996 1433.7 2.5;

我试过了:

\s.+?\s.+?;

但它会选择前面有空格的每个数字,而不仅仅是分号前面的前两个数字。有什么建议吗?

4 个答案:

答案 0 :(得分:1)

正则表达式(?: [0-9.]+){2};(85步)

详细说明:

  • (?:)非捕获组
  • ' '空间
  • [0-9.]+将列表中的单个字符与一次和无限次匹配
  • {2}完全匹配2次

答案 1 :(得分:0)

只需使用数字代替任何角色(并记住匹配分数!)

\s\d+\.\d+\s\d+\.\d+;

答案 2 :(得分:0)

我会建议这个正则表达式:

\s+\d+(\.\d+)?\s+\d+(\.\d+)?;

可以对此进行测试here

此表达式与以下组件匹配:

  1. \ s +多个空格
  2. \ d +(。\ d +)?第一双
  3. \ s +多个空格
  4. \ d +(。\ d +)?第二个双数或整数

答案 3 :(得分:0)

(很抱歉发布了多个答案)我认为我们都专注于数字的正确匹配,但可能显示该任务实际上只是匹配两个非空格文本字段后跟分号:

(?:\s\S+){2};