iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
佛心分享-我的私藏工具箱

正則!好好表達系列 第 6

關於CSV檔裡的英文地址

  • 分享至 

  • xImage
  •  

CSV檔是以逗號分隔欄位的記錄格式,方便split。但遇到英文名字的公司行號甚至英文地址,逗號也是資料的一部份,倘若沒規則可循當然無解,但有規則就有機會被Regex破解。
規則是:逗號不論前後只要連接小數點或者空白,皆視為資料內容一部份,而非split分隔號。以下以Java對三組資料解析,取第二欄位的資料:

  • 第一組:A,B,C。取得B
  • 第二組:A,SYSTEM.COM.,TW,C。取得公司名:SYSTEM.COM.,TW
  • 第三組:A,No. 15, Sec. 2, Nanjing E. Rd., Zhongshan Dist., Taipei City, Taiwan (R.O.C.),C。取得地址名:No. 15, Sec. 2, Nanjing E. Rd., Zhongshan Dist., Taipei City, Taiwan (R.O.C.)
String[] sa = {
	 "A,B,C",
     "A,SYSTEM.COM.,TW,C",
     "A,No. 15, Sec. 2, Nanjing E. Rd., Zhongshan Dist., Taipei City, Taiwan (R.O.C.),C"
};
for (String s1 : sa) {
    // String[] ssa = s1.split("(?<![ \\.]),");
    // String[] ssa = s1.split("(?!,[ \\.]),");
    // String[] ssa = s1.split(",(?=[^ \\.])");
	String[] ssa = s1.split("(?<![ \\.]),(?=[^ \\.])");
 	System.out.println(ssa[1]);
}

得到結果如下:

B
SYSTEM.COM.,TW
No. 15, Sec. 2, Nanjing E. Rd., Zhongshan Dist., Taipei City, Taiwan (R.O.C.)

註解的部份是當時研究Pattern所留下,邦友可以玩玩看Regex的look around的威力。


上一篇
隱碼公用程式
下一篇
如何從指令萃取IP
系列文
正則!好好表達14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言