У меня есть строка, содержащая буквенные символы, например:
- 254,69 метра
- 26,56 см
- 23,36 дюйма
- 100,85 футов
Я хочу удалить все буквенные символы (единицы) из вышеупомянутых строк, чтобы я мог вызвать метод double.Parse()
.
У меня есть строка, содержащая буквенные символы, например:
Я хочу удалить все буквенные символы (единицы) из вышеупомянутых строк, чтобы я мог вызвать метод double.Parse()
.
Это должно работать:
// add directive at the top
using System.Text.RegularExpressions;
string numberOnly = Regex.Replace(s, "[^0-9.]", "")
Вы должны решить это с помощью Regex. Добавьте в проект следующую ссылку:
using System.Text.RegularExpressions;
после этого вы можете использовать следующее:
string value = Regex.Replace(<yourString>, "[A-Za-z ]", "");
double parsedValue = double.Parse(value);
Предполагая, что у вас есть только буквенные символы и пробелы как единицы.
Использование LINQ:
using System.Linq;
string input ="57.20000 KG ";
string output = new string(input.Where(c=>(Char.IsDigit(c)||c=='.'||c==',')).ToArray());
Ответы Regex и Vlad LINQ хорошо освещают это решение. И оба хороших варианта.
У меня была похожая проблема, но я также хотел только явно убрать буквы, а не убирать пробелы и т.д. С этим вариантом.
Я также хотел его использовать, как показано ниже. Любое из других решений может быть упаковано аналогичным образом.
public static string StripAlpha(this string self)
{
return new string( self.Where(c => !Char.IsLetter(c)).ToArray() );
}
public static string StripNonNumeric(this string self)
{
// Use Vlad LINQ or the Regex Example
return new string(self.Where(c=>(Char.IsDigit(c)||c=='.'||c==',')).ToArray()) ; // See Vlad's
}
Это тогда будет использоваться, например:
var newString = someString.StripAlpha();
var newString2 = someString.StripNonNumeric();
Используйте API CharMatcher из библиотеки Google Guava:
String magnitudeWithUnit = "254.69 meter";
String magnitude = CharMatcher.inRange('a', 'z').or(inRange('A', 'Z')).removeFrom(magnitudeWithUnit);
Делаем static-import CharMatcher.inRange(..)
. Вы можете урезать результаты для конечного пространства.