我有一个我需要解析的字符串,但我不确定如何不使用大量的if语句和子字符串。这是我使用“”拆分的csv文件中的字符串示例,因为我无法使用逗号。
偏移:23,123长度:504更多文字更多文字213I
偏移量:23,123长度:504更多文字
偏移量:23,123长度:504
偏移:23长度:504,10更多文字更多文字213I
我需要的是Length之后的数值:
欢迎任何帮助。之前已经问过这类问题但不满足我的问题。我不知道如何使用正则表达式。
答案 0 :(得分:0)
您可以使用正则表达式和Expresso之类的工具来构建和测试正则表达式
public static Regex regex = new Regex("Length:\\s*(\\d+)", RegexOptions.CultureInvariant | RegexOptions.Compiled);
static void Main()
{
var testValue = "Offset: 23,123 Length: 504";
var match = regex.Match(testValue);
if (match.Success)
{
Console.WriteLine($"Length is {match.Groups[1].Value}");
}
}
正则表达式是Length:\s*(\d+)
说明:Length:
后面跟着0个或更多的空格,然后需要捕获1个或更多个数字的组。
答案 1 :(得分:0)
这是一种没有正则表达式的方法:
.Substring
,TakeWhile
获取该字符char.IsDigit
为true
时的字符string.Concat
将字符重新加入字符串这是一个示例方法:
public static string GetNumberAfterKeyword(string input, string keyword)
{
// Decide what you want to do if no keyword is found
if (string.IsNullOrEmpty(input) || !input.Contains(keyword)) return string.Empty;
return string.Concat(input
.Substring(input.IndexOf(keyword) + keyword.Length)
.TakeWhile(char.IsDigit));
}
示例用法:
private static void Main()
{
var sampleData = new List<string>
{
"Offset: 23,123 Length: 504 some more text some more text 213I",
"Offset: 23,123 Length: 504 some more text",
"Offset: 23,123 Length: 504",
"Offset: 23 Length: 504,10 some more text some more text 213I"
};
var keyword = "Length: ";
foreach (var sample in sampleData)
{
Console.WriteLine(GetNumberAfterKeyword(sample, keyword));
}
GetKeyFromUser("\nDone! Press any key to exit...");
}
<强>输出强>
另一种使用几乎相同逻辑的替代方法是编写一个方法,如果找到一个数字,则返回true
并为该值设置out
参数。这样可以避免获取空字符串,并使您能够在if
条件下使用该方法。
例如:
public static bool TryGetNumberAfterKeyword(string input, string keyword, out int result)
{
bool foundResult = false;
result = 0;
if (!string.IsNullOrEmpty(input) && input.Contains(keyword))
{
foundResult = int.TryParse(string.Concat(input
.Substring(input.IndexOf(keyword) + keyword.Length)
.TakeWhile(char.IsDigit)), out result);
}
return foundResult;
}
在使用中,有一些没有关键字或没有数字的其他数据:
private static void Main()
{
var sampleData = new List<string>
{
"",
"Hi",
"No keyword",
"Length: No number after length",
"Length: ",
"Offset: 23,123 Length: 504 some more text some more text 213I",
"Offset: 23,123 Length: 504 some more text",
"Offset: 23,123 Length: 504",
"Offset: 23 Length: 504,10 some more text some more text 213I"
};
var keyword = "Length: ";
foreach (var sample in sampleData)
{
int result;
if (TryGetNumberAfterKeyword(sample, keyword, out result))
{
Console.WriteLine(result);
}
else
{
Console.WriteLine("Number or keyword is missing");
}
}
GetKeyFromUser("\nDone! Press any key to exit...");
}
<强>输出强>