Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据整数的出现情况拆分字符串?_C#_.net - Fatal编程技术网

C# 如何根据整数的出现情况拆分字符串?

C# 如何根据整数的出现情况拆分字符串?,c#,.net,C#,.net,如果一个字符串包含整数,我想根据整数的出现来拆分它。怎么做 string test= "a b cdf 7654321; 然后我想存储整数和它前面的所有单词,如下所示 string stringBefore=""; // the integer will be last item string integer=""; 注意: 在我的例子中,整数总是7位您可以使用带有捕获组的Regex.Split来返回分隔符: var ans = Regex.Split(test, @"("\d{7})"

如果一个字符串包含整数,我想根据整数的出现来拆分它。怎么做

string test= "a b cdf 7654321;
然后我想存储整数和它前面的所有单词,如下所示

string stringBefore="";
// the integer will be last item
string integer="";  
注意:


在我的例子中,整数总是7位

您可以使用带有捕获组的
Regex.Split
来返回分隔符:

var ans = Regex.Split(test, @"("\d{7})");
如果数字在字符串的末尾,这将返回一个额外的空字符串。如果知道它始终位于字符串的末尾,则可以在其出现时拆分:

var ans = Regex.Split(test, @"(?=\d{7})");

根据您的注释,整数始终为7位,并且始终是字符串的最后一项

在这种情况下,只需使用
Substring()

子字符串只是基于原始字符串的一部分生成一个字符串

编辑 我有点惊讶地发现,没有一种内置的方法可以根据索引轻松地将一个字符串拆分为两个字符串(可能我错过了)。我提出了一种LINQ扩展方法,它实现了我试图实现的功能,也许您会发现它很有用:

public static string[] SplitString(this string input, int index)
{
    if(index < 0 || input.Length < index)
        throw new IndexOutOfRangeException();
    return new string[] 
    {
        String.Concat(input.Take(input.Length - index)),
        String.Concat(input.Skip(input.Length - index))
    };      
}
publicstaticstring[]SplitString(此字符串输入,int索引)
{
如果(索引<0 | |输入.长度<索引)
抛出新的IndexOutOfRangeException();
返回新字符串[]
{
String.Concat(input.Take(input.Length-index)),
String.Concat(input.Skip(input.Length-index))
};      
}
如果使用C#7,我想我更愿意使用
ValueTuple
,但是字符串数组也可以


所有东西都用提琴

以后要使用分割字符串的哪一部分?可能的输入字符串是什么样子的;输入字符串的结构/内容是否有变化?你可能已经猜到了,我正在考虑子字符串或正则表达式…整数总是字符串的最后一项吗?整数总是字符串的最后一项吗?是的,你想要字符和数字吗?我的意思是你希望结果是
abcdf
7654321
你想要字符和数字吗?是的,我想两者我认为字符串数组是好的,因为它在返回类型上与现有的
字符串兼容。Split
@NetMage是好的调用,它可能是Split()的重载,尽管我建议
子字符串
可能比
Concat
+
Take
/
Skip
:)
public static string[] SplitString(this string input, int index)
{
    if(index < 0 || input.Length < index)
        throw new IndexOutOfRangeException();
    return new string[] 
    {
        String.Concat(input.Take(input.Length - index)),
        String.Concat(input.Skip(input.Length - index))
    };      
}