从字符串中删除所有出现的几个字符
Remove all occurences of several characters from a string
所以我有一个包含数字、字母和符号的字符串,如下所示:
AD 123 (+45) AS 6.7(+8%)
我想要 List<double>
中的所有数字。为此,我首先要删除所有出现的 '(', ')', '+'
和 '%'
。
我目前的方法是 string.Replace()
方法,但看起来有点脏:
stats = stats.Replace("(", "").Replace(")", "").Replace("%", "").Replace("+", "");
还有其他想法吗?我不想只写能用的代码,我希望它优雅。
通常我会选择框架解决方案而不是正则表达式解决方案,但在您的情况下,正则表达式最适合 'elegant' 解决方案:
var str = "AD 123 (+45) AS 6.7(+8%)";
var doubles = new List<double>();
foreach (var item in Regex.Matches(str, @"(\d|\.)+"))
{
doubles.Add(double.Parse(item.ToString()));
}
//doubles = [123, 45, 6.7, 8]
我使用了 (\d|\.)+
,它匹配任何数字或点。适用于您当前的输入。
您可以循环检查字符是数字还是小数分隔符,并跟踪每个数字的开头和结尾。
string stuff = "AD 123 (+45) AS 6.7(+8%)";
List<double> numbers = new List<double>();
int numberStart = -1;
for (int i = 0; i < stuff.Length; i++)
{
if (char.IsDigit(stuff[i])
|| stuff[i].ToString() == CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator)
{
if (numberStart == -1)
{
numberStart = i;
}
}
else
{
if (numberStart != -1)
{
numbers.Add(double.Parse(stuff.Substring(numberStart, i - numberStart)));
}
numberStart = -1;
}
}
if (numberStart != -1)
{
numbers.Add(double.Parse(stuff.Substring(numberStart)));
}
Console.WriteLine(string.Join(",", numbers));
会输出
123,45,6.7,8
这里唯一的问题是它没有处理多个小数分隔符或千位分隔符的可能性。
所以我有一个包含数字、字母和符号的字符串,如下所示:
AD 123 (+45) AS 6.7(+8%)
我想要 List<double>
中的所有数字。为此,我首先要删除所有出现的 '(', ')', '+'
和 '%'
。
我目前的方法是 string.Replace()
方法,但看起来有点脏:
stats = stats.Replace("(", "").Replace(")", "").Replace("%", "").Replace("+", "");
还有其他想法吗?我不想只写能用的代码,我希望它优雅。
通常我会选择框架解决方案而不是正则表达式解决方案,但在您的情况下,正则表达式最适合 'elegant' 解决方案:
var str = "AD 123 (+45) AS 6.7(+8%)";
var doubles = new List<double>();
foreach (var item in Regex.Matches(str, @"(\d|\.)+"))
{
doubles.Add(double.Parse(item.ToString()));
}
//doubles = [123, 45, 6.7, 8]
我使用了 (\d|\.)+
,它匹配任何数字或点。适用于您当前的输入。
您可以循环检查字符是数字还是小数分隔符,并跟踪每个数字的开头和结尾。
string stuff = "AD 123 (+45) AS 6.7(+8%)";
List<double> numbers = new List<double>();
int numberStart = -1;
for (int i = 0; i < stuff.Length; i++)
{
if (char.IsDigit(stuff[i])
|| stuff[i].ToString() == CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator)
{
if (numberStart == -1)
{
numberStart = i;
}
}
else
{
if (numberStart != -1)
{
numbers.Add(double.Parse(stuff.Substring(numberStart, i - numberStart)));
}
numberStart = -1;
}
}
if (numberStart != -1)
{
numbers.Add(double.Parse(stuff.Substring(numberStart)));
}
Console.WriteLine(string.Join(",", numbers));
会输出
123,45,6.7,8
这里唯一的问题是它没有处理多个小数分隔符或千位分隔符的可能性。