Головки струн с хвостами по определенной схеме - PullRequest
3 голосов
/ 18 марта 2019

Я получаю строки, которые могут быть равны any + " " + str + "Y", где any может быть любой строкой, а строка str может быть равна "1", "2", "3", "5", "7" или "10". Моя цель - извлечь строку any.

Я придумал следующий код:

string pattern = ".* {1Y|2Y|3Y|5Y|7Y|10Y}";
string indexIDTorParse = group.ElementAt(0).IndexID;
Match result = Regex.Match(indexIDTorParse, pattern);
string IndexIDTermBit = result.Value;
string IndexID = indexIDTorParse.Replace($" {IndexIDTermBit}", "");

но это не дает права any.

1 Ответ

6 голосов
/ 18 марта 2019

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

string pattern = @"(.*) (?:[1-357]|10)Y";
string indexIDTorParse = group.ElementAt(0).IndexID;
Match result = Regex.Match(indexIDTorParse, pattern);
string IndexID = "";
if (result.Success) 
{
    IndexID = result.Groups[1].Value;
}

Соответствует регулярному выражению:

  • (.*) -Группа 1: любые 0 или более символов, как можно больше ( ПРИМЕЧАНИЕ , если вам нужно получить подстроку до первого вхождения nY, используйте (.*?), она будет соответствовать как можно меньшему числу символоввозможно до последующих шаблонов)
  • - пробел
  • (?:[1-357]|10) - 1, 2, 3 , 5 , 7 or 10`
  • Y - Y char.

См. regex demo .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...