0

我有一个字符串,我想用空格分割它以存储在字典中(足够简单)。但是,我也想要每个单词的索引和长度。

到目前为止,我只有一个单词字典以及它们的查找顺序......

 private Dictionary<int,String> makeDictionary(String ASCII)
    {
        string[] t = ASCII.Split(new[] { ' ' },
           StringSplitOptions.RemoveEmptyEntries);
        Dictionary<int, string>  aDictionary = new Dictionary<int, string>();
        for (int i = 0; i < t.Length; i++)
        {
            t[i] = stripSymbolsFromString(t[i]);

            if (!aDictionary.ContainsValue(t[i]) && t[i] != "")
            {
                aDictionary.Add(i, t[i]);
            }
        }
        return aDictionary;
    }

有谁知道如何在保留索引的同时使用 .Split() ,还是我必须使用不同的连接技术?正如有人在下面发布的那样,使用正则表达式将给出匹配的索引。

编辑:我不需要长度。正如有人指出的那样,我可以从字符串中获取它。我只需要单词的起始索引。

EDIT2:我会忽略重复的单词。

EDIT3:这是我将使用的字符串示例:

Lorem Ipsum 只是印刷和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业的标准虚拟文本,当时一位不知名的印刷商采用了一种类型的厨房并将其加扰以制作一本类型样本书。它不仅经历了五个世纪,而且经历了电子排版的飞跃,基本保持不变。它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而流行起来,最近还随着 Aldus PageMaker 等桌面出版软件(包括 Lorem Ipsum 的版本)而普及。

所以前几个元素是

[0]=>洛鲁姆,

[6]=>Ipsum,

[12]=>是

其中数字 0,6,12 是字符串中单词的原始索引

4

2 回答 2

2
string s = "abc def ghijkl mno abc";

var words = Regex.Matches(s, @"[^ ]+").Cast<Match>()
                .Select(m => new
                {
                    Str = m.Value,  //OR Length = m.Value.Length
                    Offset = m.Index
                })
                .ToList();

您可以进一步处理words以形成dictionary

var dict = words.GroupBy(w => w.Str)
                .ToDictionary(g => g.Key, g => g.Select(x => x.Offset).ToList());
于 2013-03-18T18:47:12.623 回答
0

正则表达式

比赛班

匹配有索引和长度

于 2013-03-18T18:46:26.530 回答