【发布时间】:2018-06-18 09:10:23
【问题描述】:
我有一个长度为 900-1000 个字符的字符串。 后面的模式字符串是
"数字:某事,某字符串编号:某事,某字符串"
等示例字符串:
"23:value,ordernew14:valueagain,orderagain"
要求是当它超过 1000 个字符时,我必须删除前 500 个字符。然后如果不以数字开头,我必须删除字符,直到我到达第一个字符是数字的点
sortinfo = sortinfo.Remove(0, 500);
sortinfo = new string(sortinfo.SkipWhile(c => !char.IsDigit(c)).ToArray());
我可以在上面的代码的帮助下做到这一点
在上面的例子中,如果我删除 5 个字符,输出将是
14:valueagain,orderagain
这很好。 但如果字符串有值:
23:value,or3dernew14:valueagain,orderagain
并删除5个字符,输出为
3dernew14:valueagain,orderagain
要求是有
14:valueagain,orderagain
因此它破坏了一切,因为它的格式不正确。 请帮助我,我该怎么做呢
我的完整代码
class Program
{
static void Main(string[] args)
{
string str;
str=TrimSortInfo("23:value,ord4er24:valueag4ain,order6again15:value,order"); // breaking value
//str = TrimSortInfo("23:value,order24:valueagain,orderagain15:value,order"); //working value
Console.WriteLine(str);
Console.ReadLine();
}
static string TrimSortInfo(string sortinfo)
{
if (sortinfo.Length > 15)
{
sortinfo = sortinfo.Remove(0, 15);
sortinfo = new string(sortinfo.SkipWhile(c => !char.IsDigit(c))
.ToArray());
return sortinfo;
}
return sortinfo;
}
}
【问题讨论】:
-
您是否尝试过上述解决方案的正则表达式?
-
你想去下一个“模式”...但是你的模式很差,因为你没有真正的记录之间的分隔符......所以现在你有问题了。
-
号码总是这样
14:吗?如果是,您可以匹配14:等模式的数字,否则继续 -
是的,问题模式很差,因此面临问题,无法改变模式,它存在多年,很多东西都依赖于它,改变它会破坏很多东西。必须以相同的模式工作:(
-
我想他的意思是如果它总是跟着
:。从那时起,您可以使用\d+:之类的正则表达式来匹配您的开始