String使用repitive delimiter进行解析

时间:2018-02-14 19:27:23

标签: c# string parsing

我有以下字符串:

  

$类别:BY   颜色:香料$类别:分类:植物$分类:类别:植物:叶子$来源:adl-bdc2012:vol1:出版 - 非150:KOETSIER,ALBERT $类别:分类:季节性/假日

我想解析这个字符串,并希望结果为:

  

Spice,Botanical,Leaves,KOETSIER,ALBERT,Seasonal / Holiday

我在想Substring,但似乎会变得太复杂。什么是更好的方法?

2 个答案:

答案 0 :(得分:3)

我会使用split(string),将其拆分为'$',然后按':'将其拆分

yourLongString.Split('$').Select(v => v.Split(':')).ToArray();

它将为您提供一个字符串数组数组,我认为它可以帮助您根据需要格式化字符串,您可以在下图中看到结果:

Quickwatch of yourLongString variable

答案 1 :(得分:0)

这也是另一种解决方法: 您将:字符拆分,然后通过传递任何空格,然后使用var xs = str.Split('$') .Where(p => p != "") .Select(s => s.Substring(s.LastIndexOf(":", StringComparison.Ordinal) + 1)) .ToList(); 冒号获取子字符串而不是索引结束,并将其作为字符串或数组列表返回。

xs.ForEach(Console.WriteLine);

打印结果:

Spice
Botanical
Leaves
KOETSIER, ALBERT
Seasonal / Holiday

输出

dmsgsubject, dmsgsubjectencoding = email.header.decode_header(msg['Subject'])[0]
msgsubject = dmsgsubject.decode(*([dmsgsubjectencoding] if dmsgsubjectencoding else [])) if isinstance(dmsgsubject, bytes) else dmsgsubject

然后你可以在一行中使用逗号进行decoreation。