寻找可以分割表达式的正则表达式:
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
答案 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*(.*)
答案 3 :(得分:0)
这个适用于我(使用PCRE):
/^(.+) ([0-9.]+)[\/%]+([^\/]+)$/