Как не включать часть строки в захваченную группу регулярных выражений

    String  "Ap: SV, Classe Store Stat: AC,"

Я использую отрицательный просмотр, поэтому я могу получить AC после строки Stat:

(?!Stat:)(\s\D\D),

Но это захватывает

  1. SV,
  2. AC,

Я только хочу поймать Just AC. Как мне это сделать. Я довольно новичок, когда дело доходит до регулярных выражений.

~W


person skinnyWill    schedule 12.04.2017    source источник
comment
Попробуйте (?<=Stat:\s)\D\D,. Каков ваш вкус регулярного выражения? Кстати, \D соответствует любому символу, который не является цифрой, возможно, [a-zA-Z]{2} вместо \D\D будет лучше.   -  person Wiktor Stribiżew    schedule 13.04.2017
comment
Это сработало. В настоящее время я использую csharp. что означает ?‹=. Я использовал regextester.com для проверки своего регулярного выражения, но я помню, что видел ?‹=, но это не сработало для этого сайта, но когда я проверил его в своем коде, он сработал.   -  person skinnyWill    schedule 13.04.2017
comment
я забыл спасибо Виктор Стрибизев   -  person skinnyWill    schedule 13.04.2017
comment
?<= — это просмотр назад. Вы использовали предварительный просмотр вместо просмотра назад.   -  person Barmar    schedule 13.04.2017
comment
Используйте regexhero.net или regexstorm .net для онлайн-тестирования регулярных выражений .NET. Есть и другие, но эти просты в использовании, а первый предоставляет хороший способ сравнительного анализа регулярных выражений.   -  person Wiktor Stribiżew    schedule 13.04.2017


Ответы (1)


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

var m = Regex.Match(s, @"\bStat:\s*(\D\D,)");
if (m.Success) 
{
    Console.WriteLine(m.Groups[1].Value);
}

См. эту демонстрацию регулярного выражения.

Чтобы получить значение прямо в m.Value, можно использовать просмотр назад следующим образом:

var m = Regex.Match(s, @"(?<=\bStat:\s*)\D\D,");
if (m.Success) 
{
    Console.WriteLine(m.Value);
}

См. демонстрация регулярного выражения.

Захват выглядит более эффективным и универсальным в целом.

Примечание: \b — это граница слова, если вы не хотите сопоставлять Stats как целое слово, удалите его.

person Wiktor Stribiżew    schedule 12.04.2017