工作中碰到的一些問題與解決方法記錄下來以備不時之需
商品品名規定英文括號正則表達式拆分規則
.*? :所有內容
[1-9] :整數數字1到9
\d :0到9
\d* :*表示可跟多個數字
\. :小數點
\.? :?表示無小數點或有小數點
規則是要根據英文括號"()"來把品名拆分多行,難免品名中會包含括號在內,容易混淆匹配規則
1 String nameInput = "小蘋果(1)(1富士康品種)大蘋果(2)(2蘋果梨)梨(1)"; 2 try{ 3 //String pattern = "(.*?)\\(.*?\\)"; 4 String pattern = "(.*?)\\([1-9]\\d*\\.?\\d*\\)"; 5 Pattern r = Pattern.compile(pattern); 6 Matcher m = r.matcher(nameInput); 7 while (m.find()) { 8 System.out.println(m.group(0)); 9 } 10 }catch (Exception e){ 11 e.printStackTrace(); 12 }
代碼中注釋的那一行只能匹配英文括號中所有內容,但是“大蘋果”這個商品被分成兩行了,因為前面英文括號的內容也在匹配范圍內。
輸出為:
小蘋果(1)
(1富士康品種)
大蘋果(2)
(2蘋果梨)梨(1)
String pattern = "(.*?)\\([1-9]\\d*\\.?\\d*\\)"
這行代碼可以達到要求,輸出為:
小蘋果(1)
(1富士康品種)大蘋果(2)
(2蘋果梨)梨(1)