gpt4 book ai didi

c# - 在 C#.NET 中使用特定模式修剪字符串值

转载 作者:太空狗 更新时间:2023-10-29 21:42:53 26 4
gpt4 key购买 nike

我有一个长度为 900-1000 个字符的字符串。后面的模式字符串是

"Number:something,somestringNumber:something,somestring"

等等示例字符串:

"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;
}
}

最佳答案

使用正则表达式:

static Regex rx = new Regex("(?<=.*?)[0-9]+:.*");

static string TrimSortInfo(string sortinfo, int trimLength = 15)
{
if (sortinfo.Length > trimLength)
{
return rx.Match(sortinfo, trimLength).Value;
}
return sortinfo;
}

请注意,这里存在很大的风险:您可以在数字的“中间”进行修剪。

因此您可以将“xxxxxxxxxxxxxx24:something”修剪为“4:something”。

正则表达式的意思是:查找 0-9 的数字序列(至少一个数字)( [0-9]+ ),然后是 : ,后跟所有其他字符 ( .* )。在这个序列之前可以有任何其他字符,但只能是最小数量 (?<=.*?) .此前置序列未被捕获 (?<=...) .

最后正则表达式可以简化为:

static Regex rx = new Regex("[0-9]+:.*");

因为它是 unanchored ,所以匹配将从匹配的第一次出现开始。

解决这个问题:

static Regex rx = new Regex("(?:[^0-9])([0-9]+:.*)");

static string TrimSortInfo(string sortinfo, int trimLength = 15)
{
if (sortinfo.Length > trimLength)
{
return rx.Match(sortinfo, trimLength - 1).Groups[1].Value;
}
return sortinfo;
}

我们有点作弊。要修剪 15 个字符,我们跳过 14 个字符 ( trimLength - 1 ) 然后我们捕获一个非数字字符(我们将忽略 (?:[^0-9]) )加上数字和 : 以及所有其他 ([0-9]+:.*) .注意 Groups[1].Value 的使用

关于c# - 在 C#.NET 中使用特定模式修剪字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50906060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com