我需要拆分一行文字
传递指令的一般语法是||| name | value || name | value || ... .. |||
每个交货指令以3个管道字符开始和结束 - |||
传递指令是由单个管道分隔的一组名称/值对,例如名称|值
每个名称值对由2个管道字符||分隔
名称和值可能不包含管道符
任何一对的值可以是空字符串.
我需要一个正则表达式来帮助我解决上述问题.
我有限的正则表达式技能的最新尝试:
string SampleData = "|||env|af245g||mail_idx|39||gen_date|2016/01/03 11:40:06||docm_name|Client Statement (01.03.2015?31.03.2015)||docm_cat_name|Client Statement||docm_type_id|9100||docm_type_name|Client Statement||addr_type_id|1||addr_type_name|Postal address||addr_street_nr|||addr_street_name|Robinson Road||addr_po_box|||addr_po_box_type|||addr_postcode|903334||addr_city|Singapore||addr_state|||addr_country_id|29955||addr_country_name|Singapore||obj_nr|10000023||bp_custr_type|Customer||access_portal|Y||access_library|Y||avsr_team_id|13056||pri_avsr_id|||pri_avsr_name|||ctact_phone|||dlv_type_id|5001||dlv_type_name|Channel to standard mail||ao_id|14387||ao_name|Corp Limited||ao_title|||ao_mob_nr|||ao_email_addr||||??"; string[] Split = Regex.Matches(SampleData, "(\|\|\|(?:\w+\|\w*\|\|)*\|)").Cast().Select(m => m.Value).ToArray();
预期输出应如下(基于提供的样本数据字符串):
ENV | af245g
mail_idx | 39
gen_date | 2016/01/03 11:40:06
docm_name |客户声明(01.03.2015-31.03.2015)
docm_cat_name |客户声明
docm_type_id | 9100
docm_type_name |客户声明
addr_type_id | 1
addr_type_name |邮政地址
addr_street_nr |
addr_street_name |罗宾逊道
addr_po_box |
addr_po_box_type |
addr_postcode | 903334
addr_city |新加坡
addr_state |
addr_country_id | 29955
addr_country_name |新加坡
obj_nr | 10000023
bp_custr_type |客服
access_portal | Y
access_library | Y
avsr_team_id | 13056
pri_avsr_id |
pri_avsr_name |
ctact_phone |
dlv_type_id | 5001
dlv_type_name |标准邮件的频道
ao_id | 14387
ao_name | Corp Limited
ao_title |
ao_mob_nr |
ao_email_addr |
Syed Muhamma.. 6
您也可以在不使用Regex的情况下执行此操作.它只是简单的分裂.
string nameValues = "|||zeeshan|1||ali|2||ahsan|3|||"; string sub = nameValues.Substring(3, nameValues.Length - 6); Dictionarydic = new Dictionary (); string[] subsub = sub.Split(new string[] {"||"}, StringSplitOptions.None); foreach (string item in subsub) { string[] nameVal = item.Split('|'); dic.Add(nameVal[0], nameVal[1]); } foreach (var item in dic) { // Retrieve key and value here i.e: // item.Key // item.Value }
希望这可以帮助.
您也可以在不使用Regex的情况下执行此操作.它只是简单的分裂.
string nameValues = "|||zeeshan|1||ali|2||ahsan|3|||"; string sub = nameValues.Substring(3, nameValues.Length - 6); Dictionarydic = new Dictionary (); string[] subsub = sub.Split(new string[] {"||"}, StringSplitOptions.None); foreach (string item in subsub) { string[] nameVal = item.Split('|'); dic.Add(nameVal[0], nameVal[1]); } foreach (var item in dic) { // Retrieve key and value here i.e: // item.Key // item.Value }
希望这可以帮助.