我尝试了几种方法(按位置,按空格,正则表达式),但无法计算如何最好地将以下行解析为表格。对于例如让我们说我要解析的两行是:
Bonds Bid Offer (mm) (mm) Chng
STACR 2015-HQA1 M1 125 120 5 x 1.5 0
STACR 2015-HQA12 2M2 265 5 x -2
我希望它能解析[BondName] [Bid] [Offer]:
[STACR 2015-HQA1 M1] [125] [120]
[STACR 2015-HQA12 2M2] [265] [null]
注意null是一个实际值,空格也应保留在键名中。仅供参考,债券名称中的空格数量将为2,如上例所示。
编辑:由于你们很多人在这里要求代码,所以。点之间的空格可以是1-5,所以我不能回答空格(那时很简单)。
string bondName = quoteLine.Substring(0, 19);
string bid = quoteLine.Substring(19, 5).Trim();
string offer = quoteLine.Substring(24, 6).Trim();
我能看到这个工作的唯一方法是:
答案 0 :(得分:0)
[编辑] 我没有说明空白的提议'因此,此方法将在空白的“优惠”中失败。看起来某人已经有了一个可行的答案,但我会留下linq示例给任何发现它有用的人。 [结束编辑]
基于Linq的选项。
按空格分割字符串,并删除空格。然后颠倒顺序,这样你就可以从后面开始并继续前进。数据在字符串末尾显示更加标准化。
对于该行的每个连续部分,您跳过以前的选项并仅采取您需要的内容。对于最后一部分是长字符串,您跳过了您不需要的内容,然后将顺序反转回正常状态,并将这些部分与空格连接起来。
string test = "STACR 2015-HQA1 M1 125 120 5 x 1.5 0";
var split_string_remove_empty = test.Split(new char[]{ ' ' }, StringSplitOptions.RemoveEmptyEntries).Reverse();
var change = split_string_remove_empty.Take(1)
.SingleOrDefault();
var mm2 = split_string_remove_empty.Skip(1)
.Take(1)
.SingleOrDefault();
var mm3 = split_string_remove_empty.Skip(3)
.Take(1)
.SingleOrDefault();
var offer = split_string_remove_empty.Skip(4)
.Take(1)
.SingleOrDefault();
var bid = split_string_remove_empty.Skip(5)
.Take(1)
.SingleOrDefault();
var bonds = string.Join(" ", split_string_remove_empty.Skip(6)
.Reverse());