作者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/cn.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