我有以下字符串:分裂此字符串使用JavaScript或紅寶石
Upper and lower ranch milk 125ML (3 * 8)
和1000其它類似的那些是相同的格式的不。我想將產品(文本部分),卷(125ML
)和排序規則((3 * 8)
)分隔爲單獨的變量。
我試着用excel和matlab來想出一個函數,但還沒有設法達到預期的結果。我想提出一個聰明的方法來做到這一點,而不是手動篩選每一個。所有的輸入讚賞。
我有以下字符串:分裂此字符串使用JavaScript或紅寶石
Upper and lower ranch milk 125ML (3 * 8)
和1000其它類似的那些是相同的格式的不。我想將產品(文本部分),卷(125ML
)和排序規則((3 * 8)
)分隔爲單獨的變量。
我試着用excel和matlab來想出一個函數,但還沒有設法達到預期的結果。我想提出一個聰明的方法來做到這一點,而不是手動篩選每一個。所有的輸入讚賞。
可以使用正則表達式,例如^(.*)(\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) {
\t var re = /^(.*)(\d+ML) +\((.*)\)/;
\t var matches = re.exec(from);
\t if(matches) {
\t \t return {
\t \t \t "title" : matches[1].trim(),
\t \t \t "volume": matches[2].trim(),
\t \t \t "collation": matches[3].trim(),
\t \t }
\t }
\t 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組。我誤解了嗎? – byxor
沒有每行都有3組。我更新了正則表達式,因此標題也可以包含數字 –
謝謝!這對大多數線條都是完美的,有些完全搞砸了,所以不適合這個。現在將excel表單轉換爲ruby數組並運行它。非常感謝! – theoneinskane
不是一個很好的解決方案,但可能保存一天(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)"
在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解析它可能會更容易。
我在ruby代碼中看到一個錯誤,該錯誤代碼是未定義的方法 – theoneinskane
@theoneinskane:'split'已經是一個String方法長達數十年了。你試圖用哪個對象? –
我知道,我試圖將它應用於CSV文件的行,就像這樣:'require'csv' CSV.foreach('prodName.csv')do | row | puts row.split(/ \ s +(\ d + ML)\ s + /) end' – theoneinskane
"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)"]
你可以找到第一個'('的索引,然後建立一個子串。那麼如果你用空格分割那個子串,你就知道數量是最後一個元素,其他的一切都是這個名字的一部分。然後你可以得到奇怪的支架的東西。 ---它有點不潔,但它會工作。 – byxor
只需從您的輸入中提供三個隨機樣本和相應的期望輸出。 – mvw
'javascript' /'ruby' /'matlab'它應該是哪一個? –