C# 如何从格式不同的字符串中提取数字?
我有一个字符串,如下所示:C# 如何从格式不同的字符串中提取数字?,c#,C#,我有一个字符串,如下所示: string str = "data:clientId:12345::processId::23"; 我想在上面的字符串中提取两个数字。它的格式不一样,否则我会在一个分隔符上拆分,并从中取出这两个数字。如何解析abvoe字符串并从中提取这两个数字 string[] tokens = str.Split(':'); 你有什么都没关系,而且: string str = "data:clientId:12345::processId
string str = "data:clientId:12345::processId::23";
我想在上面的字符串中提取两个数字。它的格式不一样,否则我会在一个分隔符上拆分,并从中取出这两个数字。如何解析abvoe字符串并从中提取这两个数字
string[] tokens = str.Split(':');
你有什么都没关系,而且:
string str = "data:clientId:12345::processId::23";
string[] items = str.Split(':');
Console.WriteLine(items[2]);
Console.WriteLine(items[6]);
输出:
12345
23
你有什么都没关系,而且:
string str = "data:clientId:12345::processId::23";
string[] items = str.Split(':');
Console.WriteLine(items[2]);
Console.WriteLine(items[6]);
输出:
12345
23
我真的不认为这个问题有什么问题,除非有什么没有提到或者我遗漏了什么。如果按“:”拆分,则以“::”分隔的部分将作为空字符串返回 因此,您只需要尝试将每个部分解析为一个整数,如果它有效,那么它就是解决方案的一部分
static int[] ExtractNumbers(string s)
{
var toret = new List<int>();
string[] parts = s.Split( ":" );
foreach(string part in parts) {
if ( int.TryParse( part, out int x ) )
{
toret.Add( x );
}
}
return toret.ToArray();
}
static int[]提取数字(字符串s)
{
var toret=新列表();
string[]parts=s.Split(“:”);
foreach(部分中的字符串部分){
if(内锥棱镜(零件,外锥x))
{
添加(x);
}
}
返回toret.ToArray();
}
我真的不认为这个问题有什么问题,除非有什么没有提到或我遗漏了什么。如果按“:”拆分,则以“::”分隔的部分将作为空字符串返回
因此,您只需要尝试将每个部分解析为一个整数,如果它有效,那么它就是解决方案的一部分
static int[] ExtractNumbers(string s)
{
var toret = new List<int>();
string[] parts = s.Split( ":" );
foreach(string part in parts) {
if ( int.TryParse( part, out int x ) )
{
toret.Add( x );
}
}
return toret.ToArray();
}
static int[]提取数字(字符串s)
{
var toret=新列表();
string[]parts=s.Split(“:”);
foreach(部分中的字符串部分){
if(内锥棱镜(零件,外锥x))
{
添加(x);
}
}
返回toret.ToArray();
}
一个简单的单行LINQ解决方案检查数字和空字符串:
string str = "data:clientId:12345::processId::23";
var tokens = str.Split(':').Where(t => t.All(char.IsDigit) && string.IsNullOrWhiteSpace(t) == false);
一个简单的单行LINQ解决方案检查数字和空字符串:
string str = "data:clientId:12345::processId::23";
var tokens = str.Split(':').Where(t => t.All(char.IsDigit) && string.IsNullOrWhiteSpace(t) == false);
从字符串中提取数字的一种简单方法是通过正则表达式,正如您可以从以下链接看到的,另一个问题是什么是匹配数字的正则表达式: 作为提取它的代码,您可以使用以下内容:
string inputStr = "data:clientId:12345::processId::23";
string regexPattern = @"\d+";
MatchCollection matches = Regex.Matches(inputStr , regexPattern);
foreach (Match m in matches)
Console.WriteLine("{0} at index {1}", m.Value, m.Index);
像这样,您应该能够看到字符串中包含的数字,从那里您可以获得forach中的数字,如
int numberVal = Convert.ToInt32(m.Value);
每个匹配一个(输入中应该有两个)从字符串中提取数字的一种简单方法是通过正则表达式,如下链接到另一个问题,询问匹配数字的正则表达式是什么: 作为提取它的代码,您可以使用以下内容:
string inputStr = "data:clientId:12345::processId::23";
string regexPattern = @"\d+";
MatchCollection matches = Regex.Matches(inputStr , regexPattern);
foreach (Match m in matches)
Console.WriteLine("{0} at index {1}", m.Value, m.Index);
像这样,您应该能够看到字符串中包含的数字,从那里您可以获得forach中的数字,如
int numberVal = Convert.ToInt32(m.Value);
每个匹配一个(输入中应该有两个)您在解析什么不同的格式?我的意思是我混淆了
:
,然后是:
。这就是我被困住的原因。如果它只是一个分隔符,那么我会直接对它进行拆分。在使用拆分之前,先将:
替换为:
。。现在我明白了,基本上:
是:
的一部分,所以它应该按原样工作。只是我需要得到适当的索引才能得到那个值。是的,现在说得通了。对不起,问了个愚蠢的问题。使用\d+
或:(\d+
或(?你在解析什么不同的格式?我的意思是我把:
和:
搞混了。这就是我被卡住的原因。如果它只是一个分隔符,那么我会直接拆分它。在使用拆分之前,先用替换::
,
替换,然后再使用拆分啊..现在我基本上明白了:
是o部分f::
所以它应该按原样工作。只是我需要获得适当的索引来获取该值。是的,现在有意义了。很抱歉这个愚蠢的问题。对于\d+
或:(\d+
或(?)?