how do extract decimal number from string in c#

string sentence = "X10 cats, Y20 dogs, 40 fish and 1 programmer.";

 string[] digits = Regex.Split (sentence, @"\D+");

for this code i get values in digits array like this 10,20,40,1

string sentence = "X10.4 cats, Y20.5 dogs, 40 fish and 1 programmer.";

 string[] digits = Regex.Split (sentence, @"\D+");

for this code i get values in digits array like this 10,4,20,5,40,1

but i like to get like this 10.4,20.5,40,1 in decimal numbers how can i do this.

10
задан Russ 26 August 2010 в 13:12
поделиться

5 ответов

Небольшое улучшение решения @Michael:

// NOTES: about the LINQ:
// .Where() == filters the IEnumerable (which the array is)
//     (c=>...) is the lambda for dealing with each element of the array
//     where c is an array element.
// .Trim()  == trims all blank spaces at the start and end of the string
var doubleArray = Regex.Split(sentence, @"[^0-9\.]+")
    .Where(c => c != "." && c.Trim() != "");

Возвраты:

10.4
20.5
40
1

Исходное решение было возвращение

[empty line here]
10.4
20.5
40
1
.
31
ответ дан 3 December 2019 в 13:32
поделиться

Проверьте синтаксические лексеры для большинства языков программирования на наличие регулярного выражения для десятичных знаков. Сопоставьте это регулярное выражение со строкой, найдя все совпадения.

1
ответ дан 3 December 2019 в 13:32
поделиться

попробуйте

Regex.Split (sentence, @"[^0-9\.]+")
5
ответ дан 3 December 2019 в 13:32
поделиться

В регулярном выражении необходимо разрешить десятичные разряды. Попробуйте следующее:

\d+(\.\d+)?

Это будет соответствовать числам, а не всему, кроме чисел, но должно быть просто перебирать совпадения для построения массива.

Следует иметь в виду, следует ли вам также искать отрицательные знаки, запятые и т. д.

1
ответ дан 3 December 2019 в 13:32
поделиться

Если у вас есть Linq:

stringArray.Select(s=>decimal.Parse(s));

A foreach также будет работать. Возможно, вам потребуется проверить, что каждая строка на самом деле является числом (.Parse не генерирует исключение).

0
ответ дан 3 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: