为 newb 问题道歉,但 C# 不是我的第一语言。
我正在尝试在给定的内容中建立单词之间所有分隔符的索引列表,并考虑标点符号。我希望使用正则表达式 \b (单词“边界”),但它与我没想到的各种东西相匹配。这是我写的方法:
internal static IList<int> GetBreakIndexesInContent(string content)
{
IList<int> indices = new List<int>();
if (content != null)
{
foreach (Match match in Regex.Matches(content, @"\b"))
{
Console.WriteLine("INDEX:[" + match.Index + "] CHAR:[" + content.Text[match.Index] + "] UNICODE:[" + (int)content.Text[match.Index] + "]");
indices.Add(match.Index);
}
}
return indices;
}
给定以下 100 个字符的字符串:
"Lorem ipsum dolor sit amet, tritani quaestio suscipiantur mea ea, duo et impedit facilisi evertitur."
我期望我的方法生成一个长度为 14 个元素的列表,其中第一个索引是位置 5,第二个位置是 11,依此类推(忽略位置 26 和 64 处的逗号,以及 99 处的句点)。相反,这是我得到的输出:
//COUNT: [30]
INDEX:[0] CHAR:[L] UNICODE:[76]
INDEX:[5] CHAR:[ ] UNICODE:[32]
INDEX:[6] CHAR:[i] UNICODE:[105]
INDEX:[11] CHAR:[ ] UNICODE:[32]
INDEX:[12] CHAR:[d] UNICODE:[100]
INDEX:[17] CHAR:[ ] UNICODE:[32]
INDEX:[18] CHAR:[s] UNICODE:[115]
INDEX:[21] CHAR:[ ] UNICODE:[32]
INDEX:[22] CHAR:[a] UNICODE:[97]
INDEX:[26] CHAR:[,] UNICODE:[44]
INDEX:[28] CHAR:[t] UNICODE:[116]
INDEX:[35] CHAR:[ ] UNICODE:[32]
INDEX:[36] CHAR:[q] UNICODE:[113]
INDEX:[44] CHAR:[ ] UNICODE:[32]
INDEX:[45] CHAR:[s] UNICODE:[115]
INDEX:[57] CHAR:[ ] UNICODE:[32]
INDEX:[58] CHAR:[m] UNICODE:[109]
INDEX:[61] CHAR:[ ] UNICODE:[32]
INDEX:[62] CHAR:[e] UNICODE:[101]
INDEX:[64] CHAR:[,] UNICODE:[44]
INDEX:[66] CHAR:[d] UNICODE:[100]
INDEX:[69] CHAR:[ ] UNICODE:[32]
INDEX:[70] CHAR:[e] UNICODE:[101]
INDEX:[72] CHAR:[ ] UNICODE:[32]
INDEX:[73] CHAR:[i] UNICODE:[105]
INDEX:[80] CHAR:[ ] UNICODE:[32]
INDEX:[81] CHAR:[f] UNICODE:[102]
INDEX:[89] CHAR:[ ] UNICODE:[32]
INDEX:[90] CHAR:[e] UNICODE:[101]
INDEX:[99] CHAR:[.] UNICODE:[46]
我不只是尝试匹配 " "
或稍后仅过滤 ASCII 32 的原因是因为这需要对不一定在所有单词之间使用空格的外语保持敏感。另外,因为我不想无意中将多个空间捕获为单独的“分隔符”。
我真的希望\b
能成为真正的单词分离的一个很好的标准包罗万象,但似乎并非如此。我可以“自己动手”,但我希望如果 C# 已经有某种工具来处理这个问题,我可以省去重新发明轮子的麻烦。
当然,任何帮助将不胜感激。
谢谢,格雷格。