正则表达式拆分:将列拆分为名称,百分比和溶剂

时间:2014-11-25 12:16:16

标签: regex

寻找可以分割表达式的正则表达式:

  

A-6-b 10 /%XYZ

成:

  

A-6-B
  10%
  / XYZ

请注意,第一组也可以包含空格和数字:

  

AQDF 100 56%/ ABC

和百分比可以是浮点数:

  

SFSDF 0.1%/ ABC

我已经提出了(^[A-Z\s\d-]*)(?!%)(\d+%)(.*$)但是这个符合标准符号的任何百分比都匹配,更重要的是,即使像ABC 10%/XYZ这样的简单示例也会失败,因为百分比的第一个数字被分配给第一个捕获基。

知道如何实现我的目标吗?我不是正则表达专家......

编辑:修复了示例中的错误

EDIT2:

示例不完整。还有一个:

ABC Dwsd 0.01%/ XYZ QST

  • 第一部分可以包含空格
  • 最后一部分可以包含空格
  • 数字可以是浮动

4 个答案:

答案 0 :(得分:1)

不要使用一个不可读的正则表达式来复制这一点。

根据您所说的,您的分隔符已明确定义(最后空格和最后)。例如,在JavaScript中,您可以使用:

var str = "A-6-b 10/%XYZ";

var firstSeparator = str.lastIndexOf(' ');
var secondSeparator = str.lastIndexOf('%');

var name = str.substring(0, firstSeparator);
var percentage = str.substring(firstSeparator + 1, secondSeparator + 1); // we want to include the % separator in this one
var solvent = str.substring(secondSeparator + 1);

console.log(name, percentage, solvent);

使用JSFiddle:http://jsfiddle.net/rL5uymhm/

(您的问题中可能会有拼写错误,因为您的示例与/符号出现的位置有所不同。因此代码可能需要调整。我的观点仍然存在 - 不要使用正则表达式当有更可读的替代方案时,可以使用它。)

如果你真的想使用正则表达式/^(.+ )([^%]+%)(.*)$/应该有效。

答案 1 :(得分:1)

超级简单:

/^(.*) ([1-9][0-9]*(?:\.[0-9]+)?%)(.*)$/

最容易识别的项目是您的百分比,因此([1-9][0-9]*(?:\.[0-9]+)?%)部分会查找该内容。

然后,这只是一个事先获取所有内容(不包括最终空间)以获取名称的情况,以及获得溶剂后的所有内容。

完成。

答案 2 :(得分:0)

我试试这个让我知道你是否有任何评论问题。

((?:(?!\s*[0-9]*\/%).)*)\s*([\d\/%]*)\s*(.*)

查看演示: http://regex101.com/r/lL8oN4/1

答案 3 :(得分:0)

这个适用于我(使用PCRE):

/^(.+) ([0-9.]+)[\/%]+([^\/]+)$/