2012-03-29 2 views
0

У меня есть следующие строки: fromatрегулярного выражения для числа находит в строке

session=11;reserID=1000001 

Как получить массив строк числа?

Мой код:

var value = "session=11;reserID=1000001"; 
var numbers = Regex.Split(value, @"^\d+"); 
+1

Если вы хотите найти что-то в этом месте, то найдите что-то ('Regex.Matches()') вместо того, чтобы раскалывать «не что-то». – Qtax

ответ

2

Вы, вероятно, были на правильном пути, но забыл класс символов:

Regex.Split(value, @"[^\d]+"); 

Вы также можете написать его короче, используя \D+ что эквивалентно.

Однако вы должны получить пустой элемент в начале возвращаемого массива, поэтому будьте осторожны при использовании результата. К сожалению, Regex.Split() не имеет опции, которая удаляет пустые элементы (String.Split, однако). А, не очень красиво способ решения, что:

Regex.Replace(value, @"[^\d;]", "").Split(';'); 

основан на предположении о том, что точка с запятой на самом деле соответствующая часть, где вы хотите разделить. Тест

Быстрый PowerShell:

PS> 'session=11;reserID=1000001' -replace '[^\d;]+' -split ';' 
11 
1000001 

Другим вариантом было бы просто пропустить элемент:

Regex.Split(...).Skip(1).ToArray(); 
+0

: Спасибо. Но ваш код возвращает 3 элемента. Первая - это просто пустая строка. – user1260827

+0

Конечно, регулярное выражение также расщепляется на 'session =', которое представляет собой пробег без цифр. – Joey

+0

: Как не вернуть пустой элемент? – user1260827

1
Regex 
.Matches("session=11;reserID=1000001", @"\d+") //match all digit groupings 
.Cast<Match>() //promote IEnumerable to IEnumerable<Match> so we can use Linq 
.Select(m => m.Value) //for each Match, select its (string) Value 
.ToArray() //convert to array, as per question 
0

.Net имеет встроенные функции без использования RegEx.Try System.Web.HttpUtility.ParseQueryString, прохождения строка. Вам нужно будет ссылаться на сборку System.Web, но для этого не требуется веб-контекст.

var value = "session=11;reserID=1000001"; 
    NameValueCollection numbers = 
     System.Web.HttpUtility.ParseQueryString(value.Replace(";","&")); 
0
var numbers = Regex.Split(value, @".*?(.\d+).*?"); 

или вернуть каждую цифру:

var numbers = Regex.Split(value, @".*?(\d).*?"); 
0

Я повторно использовать свой код от другого вопроса:

private void button1_Click(object sender, EventArgs e) 
    { 
     string sauce = htm.Text; //htm = textbox 
     Regex myRegex = new Regex(@"[0-9]+(?:\.[0-9]*)?", RegexOptions.Compiled); 
     foreach (Match iMatch in myRegex.Matches(sauce)) 
     { 
      txt.AppendText(Environment.NewLine + iMatch.Value);//txt= textbox 
     } 

    } 

Если вы хотите играть с регулярным выражением вот хороший сайт: http://gskinner.com/RegExr/ У них также есть настольное приложение: http://gskinner.com/RegExr/desktop/ - Он использует саманный воздух, поэтому установите его первым.

Смежные вопросы