Регулярное выражение для фильтрации по ключевому слову - PullRequest
0 голосов
/ 19 мая 2018

Я хочу отфильтровать строку и создать группы на основе ключевого слова («ИЛИ», «И», «НЕ») и т. Д., Но исключая ключевое слово «ИЛИ», «НЕ», «И» и т. Д. В скобках.

Email=sample@sample.com ИЛИ что-то = '(101010101010 ИЛИ 0101010123)' И ИД = \ "02341-21236-43497-123234 \" И CreatedDate: [2017-06-20T06: 14: 11Z TO2017-07-20T06: 14: 11Z]

Группы вывода должны быть такими:

  1. Email=sample@sample.com
  2. Something = (101010101010ИЛИ 0101010123)
  3. Id = "02341-21236-43497-123234"
  4. CreatedDate: [2017-06-20T06: 14: 11Z ДО 2017-07-20T06: 14: 11Z]

1 Ответ

0 голосов
/ 19 мая 2018

Примерно так:

(?<=^|AND|OR)(?:[^()]+?|.+?\(.+?\).+?)(?=\s*AND|OR|$)

Попробуйте онлайн .

Разбивка:

  • (?<=^|AND|OR) Утверждение предшествующих символов: AND, OR или начало строки.
  • (?: Начало группы без захвата.
    • [^()] Соответствует любому символу, кроме ( или ).
    • +? Соответствует одному или нескольким разам предыдущего символа (ленивое совпадение).
    • | Или.
    • .+? Соответствует одному или нескольким разам любого символа (ленивое совпадение).
    • \( В буквальном смысле соответствует символу (.
    • .+? Соответствует одному или нескольким разам любого символа (ленивое соответствие).
    • \) Буквально соответствует символу ).
    • .+? Соответствует одному или нескольким разам любого символа(Ленивое совпадение).
  • ) Конец группы без захвата.
  • (?=\s*AND|OR|$) Подтвердите следующие символы: AND, OR иликонец строки.

Пример использования в C #:

static List<string> ExtractParts(string input)
{
    string pattern = @"(?<=^|AND|OR)(?:[^()]+?|.+?\(.+?\).+?)(?=\s*AND|OR|$)";
    var matches = Regex.Matches(input, pattern);

    List<string> list = new List<string>();
    foreach (Match m in matches)
    {
        list.Add(m.Value.Trim());
    }

    return list;
}

static void Main(string[] args)
{
    string input = @"Email=sample@sample.com OR " +
                   @"Something = '(101010101010 OR 0101010123 )'" +
                   @" AND Id = \""02341 - 21236 - 43497 - 123234\""";
    List<string> parts = ExtractParts(input);
    foreach (string part in parts)
    {
        Console.WriteLine(part);
    }
    Console.ReadLine();
}

Живой пример .

Надеюсь, это поможет.

...