Соответствует определенному выражению не в скобках в C # - PullRequest
0 голосов
/ 27 февраля 2019

, как показано ниже, у меня есть строка, которая содержит серийный номер некоторых элементов внутри или вне скобки .Как я могу сопоставить элементы только из скобок ?

string text = "RRUS 2217 B7    (RRUS 2217 B7)";

string pattern = "[^(]RR?US? ?2217 ?B7";

foreach(Match match in Regex.Matches(text, pattern))
{
    Console.WriteLine(match.Value);
}

, но вывод в консоли следующий:

RRUS 2217 B7
RRUS 2217 B7

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Ваш шаблон начинается с символа слова.Другой вариант может заключаться в том, чтобы использовать отрицательный внешний вид (?<!\(), чтобы утверждать, что слева не является ( и использовать границу слова \b в начале матча:

(?<!\()\bRR?US? ?2217 ?B7

Объяснение

См. .NET regex demo | C # demo

Другим способом может быть сопоставление того, что вы не хотите, и сбор в группе того, что вы хотите:

\(RR?US? ?2217 ?B7\)|(RR?US? ?2217 ?B7)
0 голосов
/ 27 февраля 2019

Попробуйте , оглядываясь назад : сопоставлять каждый шаблон RR?US? ?2217 ?B7, если только ему не предшествуют скобки и буквы (?<!\([A-Z]*):

        string text = "RRUS 2217 B7    (RRUS 2217 B7)";

        string pattern = @"(?<!\([A-Z]*)RR?US? ?2217 ?B7";

        foreach(Match match in Regex.Matches(text, pattern))
        {
            Console.WriteLine(match.Value);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...