2012-03-24 42 views
-1

我想從產品名稱中提取型號。 模型應該被認爲是一串長度超過4個字符的字母和數字。如何使用正則表達式提取大於4個字符的字母和數字字符串?

例如在下面的產品名稱中,'26PFL3405H'是型號。

飛利浦26PFL3405H電視

通過型號我的意思的話,必須至少含有一個一個數字和一個字母或者小寫或大寫

+2

你嘗試過這麼遠嗎?什麼樣的正則表達式?努力在哪裏?通過您對型號的定義,「飛利浦」和「電視」也是型號,但我懷疑這是您想要的。請澄清。 – 2012-03-24 05:52:51

回答

1

你可以使用像這樣的表達式:

\b(?=[A-Z]+\d|\d+[A-Z])[A-Z\d]{4,}\b 

要使其不區分大小寫,請使用/i標誌或(?i)

+0

我應該在問題中指定這個。模態必須同時包含數字和字母,但不存在多少字母及其包含的數字的條件。但是總模態名稱應該是至少4個字符長。 – Ankit 2012-03-24 06:32:56

+0

@Ankit,已更新。 – Qtax 2012-03-24 07:24:40

+0

謝謝,工作良好,但我如何修改它,使模型是至少4個字符長? – Ankit 2012-03-24 08:16:17

1

試試這個表達式:(固定)

<?php 

$product_name = "Philips 26PFL3405H Television"; 
$pattern = '/ (\w|\d[\d\w]+) /i'; 
preg_match($pattern, $product_name, $matches); 

echo $matches[1]; 

?> 

/\s([A-Z0-9]+)\s/ 
+0

謝謝,我打算在php中使用這個,你的正則表達式不是強制模型號包含至少一個字母和一個字母。模型必須包含字母和數字。 – Ankit 2012-03-24 06:42:59

+0

@Ankit我已經糾正它。它現在在PHP中(+至少執行一個1個字母和1個字符的匹配) – 2012-03-24 06:54:21

1

爲了滿足它必須包含兩個條件,正則表達式應該是什麼樣子,

[A-Z0-9]*(?:[A-Z][0-9]|[0-9][A-Z])[A-Z0-9]* 

我不完全是什麼強制執行最小長度的最佳方式,但這會起作用,

(?:[A-Z][0-9]|[0-9][A-Z])[A-Z0-9]{3,}|[A-Z0-9](?:[A-Z][0-9]|[0-9][A-Z])[A-Z0-9]{2,}|[A-Z0-9]{2,}(?:[A-Z][0-9]|[0-9][A-Z])[A-Z0-9]|[A-Z0-9]{3,}(?:[A-Z][0-9]|[0-9][A-Z]) 

請注意,我沒有發佈這樣長的正則表達式,看起來很簡單,沒有先給它一些想法;您可能只想按長度過濾第一個正則表達式的結果。

0

我將採取2步的方法:4+濾鏡尺寸,然後再尋找字母和數字分別:

echo "12345 Philips 26PFL3405H Television" | egrep -o "\b[a-zA-Z0-9]{4,}\b" | egrep "[0-9]" | egrep "[a-zA-Z]" 
26PFL3405H 
相關問題