-1

У меня есть длинный список слов, символов и новых строк, как заставить регулярное выражение искать текст только между ДВУХ ТОЧНЫХ СЛОВ в списке?

Это то, что я придумал, но это не останавливает поиск "

(?!color).*id":(.*?),\s.*name": "(.*?)",\s.*\s.*miles

Например: я хочу, чтобы значение REGEX вернуло следующее и прекратило поиск после того, как слово снова достигнет цвета.

Матчи:

1159 SAM
1597 ROBERT
1423 CARLOS

Код:

У меня есть длинный список слов, символов и новых строк, как заставить регулярное выражение искать текст только между ДВУХ ТОЧНЫХ СЛОВ в списке?

Пример:

Я хочу, чтобы REGEX вернул следующее и прекратил поиск после того, как он снова достигнет цвета слова.

Матчи:

1159 SAM
1597 ROBERT
1423 CARLOS

Код:

{
"groups": [{
    "id": 113,
    "name": "CAPISCO",
    "color": "#07380f",
    "params": [{
        "id": 1559,
        "name": "SAM.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
}, {
        "id": 1597,
        "name": "ROBERT.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
}, {
        "id": 1423,
        "name": "CARLOS.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
"id": 113,
    "name": "CORBAEU",
    "color": "#09854",
 "id": 113,
    "name": "SALUD",
    "color": "#07380f",
        "id": 1012,
}, {


            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
}, {
        "id": 98,
        "name": "ANNIE.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
}, {
        "id": 1367,
        "name": "PETE.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"

        "id": 866,
        "name": "Jay.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
}, {
        "id": 15933,
        "name": "JEAN.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"

1 ответ1

1

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

  • Базовый шаблон для соответствия: (expr)
  • Шаблон для одного совпадения между граничными словами: boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
  • Шаблон для двух совпадений между граничными словами: boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
  • Шаблон для трех соответствий между граничными словами: borderword boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword

и так далее ... В вашем случае «borderword» - это «цвет».

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .