ograniczenie zakresu wyszukiwania wyrażeń regularnych

-1

Mam długą listę słów, znaków i nowych wierszy, jak powiedzieć regex, aby przeszukiwał tylko tekst pomiędzy DWIEMI DOKŁADNYMI SŁOWAMI na liście?

To właśnie wymyśliłem, ale NIE przestaje szukać ”

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

przykład: chcę, aby tonacja REGEX zwracała następujące informacje i przestała szukać po osiągnięciu koloru słowa ponownie.

Mecze:

1159 SAM
1597 ROBERT
1423 CARLOS

Kod:

Mam długą listę słów, znaków i nowych wierszy, jak powiedzieć regex, aby przeszukiwał tylko tekst pomiędzy DWIEMI DOKŁADNYMI SŁOWAMI na liście?

Przykład:

Chcę, aby REGEX zwrócił następujące informacje i przestał wyszukiwać po ponownym uzyskaniu koloru słowa.

Mecze:

1159 SAM
1597 ROBERT
1423 CARLOS

Kod:

{
"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"
krimo Vasquez
źródło
Formatowanie i długość tego pytania sprawią, że większość użytkowników da mu -1 lub spróbuje go zamknąć. Edytuj i wyczyść pytanie.
Eric F
PRZEPRASZAM! Nie wiem, jak sformatować mój kod !!!
krimo Vasquez
1
Nad oknem edytora znajdują się przyciski, użyj ich.
gronostaj
Wyczyściłem twój post. Mam nadzieję, że to pomoże
Eric F

Odpowiedzi:

1

Regex to język pasujący do wzorca. Dzięki niemu definiujesz tylko wzór. Nie ma sposobu na utrzymanie licznika do zapamiętania liczby dopasowań - to zależy wyłącznie od implementacji przy użyciu mechanizmu wyrażeń regularnych - na przykład możesz napisać trochę kodu w dowolnym języku programowania obsługującym wyrażenia regularne, aby zachować liczbę meczów i zatrzymaj się po n znaleziono mecze. Możesz skonstruować tylko wyrażenie regularne, które dopasuje daną grupę dokładnie określoną liczbę razy, powtarzając wzór. Innymi słowy - powtórz swój wzór trzy razy, aby uzyskać trzy mecze. Na przykład:

  • Wzór podstawowy dla meczu: (expr)
  • Wzór dla jednego dopasowania między słowami granicznymi: boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
  • Wzór dla dwóch dopasowań między słowami granicznymi: boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
  • Wzór dla powtórek między słowami granicznymi boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword

et cetera ... W twoim przypadku „granica słowa kluczowego” to „kolor”.

Wyrażenie regularne nie pozwala mu znaleźć nieznanej liczby dopasowań, a następnie zatrzymać się przy danym słowie. Typowe metody wyrażeń regularnych znajdują tylko pierwsze dopasowanie lub wszystkie dopasowania wzorca w dokumencie. Twój problem wymaga niestandardowej implementacji. W języku programowania, w którym można napisać pętlę, która najpierw dopasowuje pozycję słowa kluczowego, stamtąd pasuje do wzorca, i dopasowuje ten wzór, aby znaleźć kolejne elementy, aż zbliży się do następnego słowa kluczowego, w którym się zatrzymuje.

pKami
źródło