作者skitty (aki)
看板C_Sharp
標題[問題] 文字內容取資料
時間Mon Dec 12 08:55:00 2016
滿常要去打網頁取資料
通常讀回來的內容長的會是下面這樣
A=xxx,B=ooo,C=yyy,…
A="aaa" B="bbb"……
中間分隔的可能是逗號分號或空白
等號右邊的值可能有放引號或沒引號
我太菜只會用Split去做分割
想請問有比較好的處理方式嗎?
A=xxx,B=ooo…算一筆資料
一次處理的量大概都幾千筆
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.45.234
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Sharp/M.1481504102.A.12A.html
1F:推 IKAFIRE: regex12/12 09:18
2F:推 GoalBased: 你用spilit有遇到什麼問題嗎 才兩種狀況很好處理吧12/12 12:43
3F:推 vi000246: \w="?\w+"?12/12 12:59
感謝IKAFIRE前輩的提示
用Split是可以用
但是就覺得有點土法煉鋼的感覺
原始資料先拆成一次>>>取單筆
單筆再拆一次取每個等號的資料
用兩次foreach來達成
這樣做比起regex的效能是否比較差?
這邊是我自己try出來的規則
string rule = @"A=(?<1>[^,]), ";
這樣可以取到match.Group["1"]的值(A的值)
※ 編輯: skitty (114.136.45.234), 12/12/2016 14:14:21
※ 編輯: skitty (114.136.45.234), 12/12/2016 14:14:53
4F:→ Litfal: 用regex比較好,用split要考慮雙引號裡面有分隔符號的狀況12/12 14:44
5F:推 Peruheru: 如果有單引號,前面變數有超過一個字 \w+=["']?\w+["']?12/12 17:12
6F:→ Peruheru: 不過如果引號不對稱也會符合就是了,像是 ab="89'12/12 17:14
7F:推 Peruheru: 用 (\w+)=["']?(\w+)["']? 的話,群組1和群組2就是要的12/12 17:17
8F:→ Peruheru: 剩下就是看會不會有其他符號(小數點之類)等要加入模式內 12/12 17:18
9F:→ Peruheru: 有專版RegExp唷 12/12 17:19
感謝 !!
※ 編輯: skitty (223.137.178.2), 12/12/2016 22:29:37