获取相应的字符串问题

【Help】 2016-04-29 10:13:26
1、 string str =
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。XX 社会经验
社会经验 ";
这种的结果应该是 忠实诚信,讲原则,说到做到,决不推卸责任。XX 社会经验

2、 string str =
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。 社会经验XXX 测试了
社会经验 ";
这种的结果应该是 忠实诚信,讲原则,说到做到,决不推卸责任。后面的就不会再读取了

3、 string str =
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。 社会经验
社会经验 ";
这种的结果应该是 忠实诚信,讲原则,说到做到,决不推卸责任。和第二个一样

4、 string str =
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。
社会经验 ";
这种的结果应该是 忠实诚信,讲原则,说到做到,决不推卸责任。和第二个一样,这里是换行了
...全文
146 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
多个endkey就定义个素数组,然后这个方法接受两个参数,startKey和endKey,返回prevStartindex,用LINQ的Min方法获取最小的返回值
  • 打赏
  • 举报
回复
List<string> list = new List<string>()
{
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。XX 社会经验
社会经验",
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。 社会经验XXX 测试了
社会经验" ,
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。 社会经验
社会经验",
@"自我评价忠实诚信,讲原则,说到做到,决不推卸责任。
社会经验"
};

string startKey = "自我评价";
string endKey = "社会经验";
char[] endPoint = new[] {
',',',',
'.','。',
':',':',
'\n','\r'
};
list.ForEach(s =>
{
int startIndex = s.IndexOf(startKey);
if (startIndex < 0)
{
startIndex = 0;//没找到,从0开始找
}
else
{
startIndex += startKey.Length;//找到了,那么需要在Key长度之后开始找
}
var prevStartIndex = startIndex;
while (true)
{
int endIndex = s.IndexOf(endKey, prevStartIndex + (prevStartIndex == startIndex ? 0 : endKey.Length));
if (endIndex > 0)
{
prevStartIndex = endIndex;
var tmpStr = s.Substring(startIndex, endIndex - startIndex);
if (!Regex.IsMatch(tmpStr, @"[\n\r]$"))
{
tmpStr = tmpStr.TrimEnd();
}
if (endPoint.Any(c => tmpStr[tmpStr.Length - 1] == c))
{
break;
}

}
else
{
if (prevStartIndex == startIndex)
{
prevStartIndex = s.Length - 1;
}
break;
}
}
Console.WriteLine(s.Substring(startIndex, prevStartIndex - startIndex).TrimEnd());
});
【Help】 2016-04-29
  • 打赏
  • 举报
回复
引用 6 楼 hanjun0612 的回复:
[quote=引用 5 楼 zhanglong_longlong 的回复:] [quote=引用 4 楼 hanjun0612 的回复:] 一定要在一个字符串里吗? 不能是对象形式的多个属性来区别吗?
只能字符串[/quote] 只能是字符串,感觉有点麻烦。没想到什么好方法[/quote]先谢谢。
正怒月神 版主 2016-04-29
  • 打赏
  • 举报
回复
引用 5 楼 zhanglong_longlong 的回复:
[quote=引用 4 楼 hanjun0612 的回复:] 一定要在一个字符串里吗? 不能是对象形式的多个属性来区别吗?
只能字符串[/quote] 只能是字符串,感觉有点麻烦。没想到什么好方法
正怒月神 版主 2016-04-29
  • 打赏
  • 举报
回复
一定要在一个字符串里吗? 不能是对象形式的多个属性来区别吗?
【Help】 2016-04-29
  • 打赏
  • 举报
回复
引用 4 楼 hanjun0612 的回复:
一定要在一个字符串里吗? 不能是对象形式的多个属性来区别吗?
只能字符串
【Help】 2016-04-29
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
第二行的社会经验是固定的? 然后意思是只有xx社会经验的才匹配? xx是什么,数字吗?
这个不能用正则写的,这里可能包含多个关键词,只是先以社会经验做举例
【Help】 2016-04-29
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
第二行的社会经验是固定的? 然后意思是只有xx社会经验的才匹配? xx是什么,数字吗?
第二行的社会经验是一种情况,他可能就独立的一行里面, 只要社会经验关键词前面被任何一个字符串开头都可以匹配
  • 打赏
  • 举报
回复
第二行的社会经验是固定的? 然后意思是只有xx社会经验的才匹配? xx是什么,数字吗?
  • 打赏
  • 举报
回复
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的写法
【Help】 2016-04-29
  • 打赏
  • 举报
回复
非常感谢您。
  • 打赏
  • 举报
回复
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 部分自己考虑下怎么处理吧

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧