Regex появление первых цифр - PullRequest
0 голосов
/ 11 июня 2018

Моя задача - извлечь первые цифры в следующей строке:

GLB=VSCA|34|speed|1|

Мой шаблон следующий:

(?x:VSCA(\|){1}(\d.))

В основном мне нужно извлечь "34", первыйпоявление цифр после «VSCA».По моей схеме я получаю группу, но можно ли получить только номер?это мой фрагмент кода c #:

string regex = @"(?x:VSCA(\|){1}(\d.))";
Regex rx = new Regex(regex);
string s = "GLB=VSCA|34|speed|1|";

if (rx.Match(s).Success)
{
    var test = rx.Match(s).Groups[1].ToString();
}

Ответы [ 5 ]

0 голосов
/ 11 июня 2018

Как насчет (?<=VSCA\|)[0-9]+?

Попробуйте здесь

0 голосов
/ 11 июня 2018

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

string regex = @"(?x:VSCA(\|){1}(?<number>\d.?))";
Regex rx = new Regex(regex);
string s = "GLB:VSCA|34|speed|1|";

var match = rx.Match(s); 
if(match.Success) Console.WriteLine(match.Groups["number"]);
0 голосов
/ 11 июня 2018

Вы можете сопоставить 34 (первые цифры после VSCA), используя положительный вид сзади (?<=VSCA\D*), чтобы утверждать, что слева находится VSCA, за которым следует ноль или раз, а не цифра \D* изатем сопоставьте одну или несколько цифр \d+:

(?<=VSCA\D*)\d+

Если вам нужно, чтобы труба была после VSCA, вы можете включить ее в обзор позади.:

(?<=VSCA\|)\d+

Демо

0 голосов
/ 11 июня 2018

Для этого вам не нужно регулярное выражение, вы можете просто разделить на символ '|':

string s = "GLB=VSCA|34|speed|1|";

string[] parts = s.Split('|');

if(parts.Length >= 2)
{
    Console.WriteLine(parts[1]); //prints 34
}

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

[0] - "GLB=VSCA"
[1] - "34"
[2] - "speed"
[3] - "1"

Скрипка здесь

0 голосов
/ 11 июня 2018

Этот шаблон регулярного выражения: (?<=VSCA\|)\d+?(?=\|) будет соответствовать только числу.(Если ваш номер может быть отрицательным / иметь десятичные разряды, вы можете вместо этого использовать (?<=VSCA\|).+?(?=\|))

...