[問題] 文字內容取資料 regex

看板C_Sharp (C#)作者 (aki)時間8年前 (2016/12/12 08:55), 8年前編輯推噓5(504)
留言9則, 5人參與, 最新討論串1/1
滿常要去打網頁取資料 通常讀回來的內容長的會是下面這樣 A=xxx,B=ooo,C=yyy,… A="aaa" B="bbb"…… 中間分隔的可能是逗號分號或空白 等號右邊的值可能有放引號或沒引號 我太菜只會用Split去做分割 想請問有比較好的處理方式嗎? A=xxx,B=ooo…算一筆資料 一次處理的量大概都幾千筆 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.45.234 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1481504102.A.12A.html

12/12 09:18, , 1F
regex
12/12 09:18, 1F

12/12 12:43, , 2F
你用spilit有遇到什麼問題嗎 才兩種狀況很好處理吧
12/12 12:43, 2F

12/12 12:59, , 3F
\w="?\w+"?
12/12 12:59, 3F
感謝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

12/12 14:44, , 4F
用regex比較好,用split要考慮雙引號裡面有分隔符號的狀況
12/12 14:44, 4F

12/12 17:12, , 5F
如果有單引號,前面變數有超過一個字 \w+=["']?\w+["']?
12/12 17:12, 5F

12/12 17:14, , 6F
不過如果引號不對稱也會符合就是了,像是 ab="89'
12/12 17:14, 6F

12/12 17:17, , 7F
用 (\w+)=["']?(\w+)["']? 的話,群組1和群組2就是要的
12/12 17:17, 7F

12/12 17:18, , 8F
剩下就是看會不會有其他符號(小數點之類)等要加入模式內
12/12 17:18, 8F

12/12 17:19, , 9F
有專版RegExp唷
12/12 17:19, 9F
感謝 !! ※ 編輯: skitty (223.137.178.2), 12/12/2016 22:29:37
文章代碼(AID): #1OJVLc4g (C_Sharp)
文章代碼(AID): #1OJVLc4g (C_Sharp)