我有以下字符串:
Upper and lower ranch milk 125ML (3 * 8)
和1000个其他类似的格式不同的。我想将产品(文本部分),卷(125ML
)和排序规则((3 * 8)
)分离为单独的变量。
我尝试使用excel和matlab来提出一个函数,但是还没有达到预期的效果。我想提出一个聪明的方法,而不是手动筛选每一个。感谢所有投入。
答案 0 :(得分:6)
您可以使用正则表达式,例如^(.*)( \d+ML) +\((.*)\)
<强>解释强>
^(.*)
第1组:开始时的任何字符
( \d+ML)
第2组:一个空格后跟一个数字和ML
+\((.*)\)
第3组:在至少一个空格后的括号之间的任何内容
应用于您的示例字符串
完全匹配Upper and lower 2 ranch milk 125ML (3 * 8)
第1组:Upper and lower 2 ranch milk
第2组:125ML
第3组:3 * 8
JavaScript中的示例代码段
查看控制台
function extractInformation(from) {
var re = /^(.*)( \d+ML) +\((.*)\)/;
var matches = re.exec(from);
if(matches) {
return {
"title" : matches[1].trim(),
"volume": matches[2].trim(),
"collation": matches[3].trim(),
}
}
return {};
}
console.log(extractInformation("Upper and lower ranch milk 125ML (3 * 8)"));
console.log(extractInformation("Upper and lower 123 ranch milk 125ML (3 * 8)"))
答案 1 :(得分:1)
不是一个好的解决方案,但可能会节省一天(JavaScript)。
var str = "Upper and lower ranch milk 125ML (3 * 8)"
f = str.match(/\d+ML/g)[0]
//"125ML"
[x,y] = str.split(f)
//Array [ "Upper and lower ranch milk ", " (3 * 8)" ]
x
//"Upper and lower ranch milk "
y
//" (3 * 8)"
答案 2 :(得分:1)
在Ruby中,您只需要分开一些数字后跟ML
:
text = "Upper and lower ranch milk 125ML (3 * 8)"
p text.split(/\s+(\d+ML)\s+/)
# ["Upper and lower ranch milk", "125ML", "(3 * 8)"]
split
参数通常不会在列表中返回,除非您定义了一个组(正则表达式中包含()
)。
要解析Excel文件,将电子表格导出为CSV文件并使用CSV class解析它可能会容易得多。
答案 3 :(得分:1)
"Upper and lower ranch milk 125ML (3 * 8)".partition(/\d+ML/)
# => ["Upper and lower ranch milk ", "125ML", " (3 * 8)"]
"Upper and lower ranch milk 125ML (3 * 8)".partition(/\d+ML/).map(&:strip)
# => ["Upper and lower ranch milk", "125ML", "(3 * 8)"]