Как я могу получить RegEx.Split для извлечения ряда чисел, содержащих десятичные точки из строки? - PullRequest
2 голосов
/ 30 июня 2010

Этот пример извлечения целых чисел из строки распространен:

string input = "10 blah 20 30 nonsense 40 50";

string[] numbers = System.Text.RegularExpressions.Regex.Split(input, @"^[\d]");

Но как мне учесть числа с десятичной точкой?

, например

string input = "10 blah 20 30 nonsense 40.5 50"

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

В своей наивности я думал, что сработает следующее:

string[] numbers = System.Text.RegularExpressions.Regex.Split(input, @"^[\d\.]");

Но это приводит к тому, что десятичная точка разделяется на собственный элемент массива.

Кажется, это должно быть так просто, но я пробовал все виды регулярных выражений, но безуспешно. Я рву свои волосы - любая помощь очень ценится!

Ответы [ 2 ]

2 голосов
/ 30 июня 2010

Помните, что с Regex.Split(input, @"[^\d.]+"); вы получите ложные срабатывания (для таких строк, как non.sense или 50.6.8 ) => вам придется фильтроватьрезультаты со значением '.'в них.

Вы также можете использовать метод Matches вместо Split.

MatchCollection mc = Regex.Matches(input, @"\d+(?:\.\d+)?");<br />
string[] numbers = (from Match m in mc select m.Value).ToArray();
0 голосов
/ 30 июня 2010
System.Text.RegularExpressions.Regex.Split(input, @"[^\d.]+");

Разделитель разделений - это 1 или более символов, которые не являются ни цифрами, ни точками. Обратите внимание, что ваш общий пример неверен даже для первого ввода. Он будет просто использовать первую цифру в качестве разделителя, что означает, что он не появляется в массиве.

РЕДАКТИРОВАТЬ: я проверил его с обоими входами, и он работает:

string input = "10 blah 20 30 nonsense 40 50";
System.Text.RegularExpressions.Regex.Split(input, @"[^\d.]+");
{ "10", "20", "30", "40", "50" }

input = "10 blah 20 30 nonsense 40.5 50";
System.Text.RegularExpressions.Regex.Split(input, @"[^\d.]+");
{ "10", "20", "30", "40.5", "50" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...