使用javascript或ruby拆分此字符串

时间:2017-04-11 10:54:50

标签: javascript ruby matlab

我有以下字符串:

Upper and lower ranch milk 125ML (3 * 8)

和1000个其他类似的格式不同的。我想将产品(文本部分),卷(125ML)和排序规则((3 * 8))分离为单独的变量。

我尝试使用excel和matlab来提出一个函数,但是还没有达到预期的效果。我想提出一个聪明的方法,而不是手动筛选每一个。感谢所有投入。

4 个答案:

答案 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

Demo

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)"]