62,244
社区成员




List<string> list = new List<string>()
{
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。XX 社会经验
社会经验",
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。 社会经验XXX 测试了
社会经验" ,
@"自我评价忠实诚信,讲原则,说到做到,教育经历,决不推卸责任。 社会经验
社会经验",
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。
社会经验",
@"讲原则,说到做到"
};
string startKey = "自我评价";
//string endKey = "社会经验";
string[] endKeys = { "教育经历","社会经验" };
char[] endPoint = new[] {//定义哪些符号认为是结束点,需补充
',',',',
'.','。',
':',':',
'\n','\r'
};
Func<string,int, string, int> func = (str,si, ek) =>
{
var prevStartIndex = si;
while (true)
{
int endIndex = str.IndexOf(ek, prevStartIndex + (prevStartIndex == si ? 0 : ek.Length));
if (endIndex > 0)
{
prevStartIndex = endIndex;
var tmpStr = str.Substring(si, endIndex - si);
//if (!Regex.IsMatch(tmpStr, @"[\n\r]$"))
//{
// tmpStr = tmpStr.TrimEnd();
//}
if (Regex.IsMatch(tmpStr, @"\s+$") || endPoint.Any(c => tmpStr[tmpStr.Length - 1] == c))
{
break;
}
}
else
{
if (prevStartIndex == si)//整个字符串就没关键字,那么就截取到最后一个位置
{
prevStartIndex = str.Length;
}
break;
}
}
return prevStartIndex;
};
list.ForEach(s =>
{
int startIndex = s.IndexOf(startKey);
if (startIndex < 0)
{
startIndex = 0;//没找到,从0开始找
}
else
{
startIndex += startKey.Length;//找到了,那么需要在Key长度之后开始找
}
int prevStartIndex = endKeys.Select(k => func(s, startIndex, k)).Where(i => i >= startIndex).Min();
Console.WriteLine(s.Substring(startIndex, prevStartIndex - startIndex).TrimEnd());
});
多个EndKey的写法List<string> list = new List<string>()
{
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。XX 社会经验
社会经验",
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。 社会经验XXX 测试了
社会经验" ,
@"自我评价忠实诚信,讲原则,说到做到,教育经历,决不推卸责任。 社会经验
社会经验",
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。
社会经验"
};
string startKey = "自我评价";
string endKey = "社会经验";
string[] endKeys = { "教育经历","社会经验" };
char[] endPoint = new[] {
',',',',
'.','。',
':',':',
'\n','\r'
};
Func<string,string, string, int> func = (str,sk, ek) =>
{
int startIndex = str.IndexOf(sk);
if (startIndex < 0)
{
startIndex = 0;//没找到,从0开始找
}
else
{
startIndex += sk.Length;//找到了,那么需要在Key长度之后开始找
}
var prevStartIndex = startIndex;
while (true)
{
int endIndex = str.IndexOf(ek, prevStartIndex + (prevStartIndex == startIndex ? 0 : ek.Length));
if (endIndex > 0)
{
prevStartIndex = endIndex;
var tmpStr = str.Substring(startIndex, endIndex - startIndex);
//if (!Regex.IsMatch(tmpStr, @"[\n\r]$"))
//{
// tmpStr = tmpStr.TrimEnd();
//}
if (Regex.IsMatch(tmpStr, @"\s+$") || endPoint.Any(c => tmpStr[tmpStr.Length - 1] == c))
{
break;
}
}
else
{
if (prevStartIndex == startIndex)
{
prevStartIndex = str.Length - 1;
}
break;
}
}
return prevStartIndex;
};
list.ForEach(s =>
{
int startIndex = s.IndexOf(startKey);
int prevStartIndex = endKeys.Min(k => func(s, startKey, k));
Console.WriteLine(s.Substring(startIndex, prevStartIndex - startIndex).TrimEnd());
});
startIndex 部分自己考虑下怎么处理吧