根据模式 C# 提取字符串的一部分
Extract a part of the string based on a pattern C#
我正在尝试根据特定模式在 C# 中提取字符串的一部分。
示例:
pattern1 => string1_string2_{0}_string3_string4.txt should return string value of
"{0}"
toto_tata_2021_titi_tutu.txt should return 2021
pattern2 => string1_string2_string3_{0}_string4.csv should return string value of "{0}"
toto_tata_titi_2022_tutu.csv should return 2022
谢谢!
string pattern = "string1_string2_{0}_string3_string4.txt";
int indexOfPlaceholder = pattern.IndexOf("{0}");
int numberOfPreviousUnderscores = pattern.Substring(0, indexOfPlaceholder).Split('_', StringSplitOptions.RemoveEmptyEntries).Length;
string stringToBeMatched = "toto_tata_2021_titi_tutu.txt";
string stringAtPlaceholder = stringToBeMatched.Split('_')[numberOfPreviousUnderscores];
使用库 System.Text.RegularExpressions
:
public static string ExtractYear(string s)
{
var match = Regex.Match(s, "([0-9]{8}" +
"|[0-9]{4}-[0-9]{2}-[0-9]{2}" +
"|[0-9]{4})");
if (match.Success)
{
return match.Groups[1].Value;
}
throw new ArgumentOutOfRangeException();
}
我为新案例添加了解决方案。您可以通过在它们后面附加“|”来添加更多模式。
注意图案的顺序。第一个首先匹配字符串中的每个字符。
对于像这样的情况,Regex 听起来是个不错的选择。
我正在尝试根据特定模式在 C# 中提取字符串的一部分。
示例:
pattern1 => string1_string2_{0}_string3_string4.txt should return string value of "{0}"
toto_tata_2021_titi_tutu.txt should return 2021
pattern2 => string1_string2_string3_{0}_string4.csv should return string value of "{0}"
toto_tata_titi_2022_tutu.csv should return 2022
谢谢!
string pattern = "string1_string2_{0}_string3_string4.txt";
int indexOfPlaceholder = pattern.IndexOf("{0}");
int numberOfPreviousUnderscores = pattern.Substring(0, indexOfPlaceholder).Split('_', StringSplitOptions.RemoveEmptyEntries).Length;
string stringToBeMatched = "toto_tata_2021_titi_tutu.txt";
string stringAtPlaceholder = stringToBeMatched.Split('_')[numberOfPreviousUnderscores];
使用库 System.Text.RegularExpressions
:
public static string ExtractYear(string s)
{
var match = Regex.Match(s, "([0-9]{8}" +
"|[0-9]{4}-[0-9]{2}-[0-9]{2}" +
"|[0-9]{4})");
if (match.Success)
{
return match.Groups[1].Value;
}
throw new ArgumentOutOfRangeException();
}
我为新案例添加了解决方案。您可以通过在它们后面附加“|”来添加更多模式。
注意图案的顺序。第一个首先匹配字符串中的每个字符。
对于像这样的情况,Regex 听起来是个不错的选择。