У меня есть следующие строки: fromatрегулярного выражения для числа находит в строке
session=11;reserID=1000001
Как получить массив строк числа?
Мой код:
var value = "session=11;reserID=1000001";
var numbers = Regex.Split(value, @"^\d+");
У меня есть следующие строки: fromatрегулярного выражения для числа находит в строке
session=11;reserID=1000001
Как получить массив строк числа?
Мой код:
var value = "session=11;reserID=1000001";
var numbers = Regex.Split(value, @"^\d+");
Вы, вероятно, были на правильном пути, но забыл класс символов:
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();
: Спасибо. Но ваш код возвращает 3 элемента. Первая - это просто пустая строка. – user1260827
Конечно, регулярное выражение также расщепляется на 'session =', которое представляет собой пробег без цифр. – Joey
: Как не вернуть пустой элемент? – user1260827
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
.Net имеет встроенные функции без использования RegEx.Try System.Web.HttpUtility.ParseQueryString
, прохождения строка. Вам нужно будет ссылаться на сборку System.Web
, но для этого не требуется веб-контекст.
var value = "session=11;reserID=1000001";
NameValueCollection numbers =
System.Web.HttpUtility.ParseQueryString(value.Replace(";","&"));
var numbers = Regex.Split(value, @".*?(.\d+).*?");
или вернуть каждую цифру:
var numbers = Regex.Split(value, @".*?(\d).*?");
Я повторно использовать свой код от другого вопроса:
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/ - Он использует саманный воздух, поэтому установите его первым.
Если вы хотите найти что-то в этом месте, то найдите что-то ('Regex.Matches()') вместо того, чтобы раскалывать «не что-то». – Qtax