limite de recherche regex

-1

J'ai une longue liste de mots, de caractères et de nouvelles lignes, comment dire à la regex de ne rechercher que le texte entre DEUX MOTS EXACTS sur la liste?

C’est ce que j’ai trouvé mais il n’arrête pas de chercher "

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

exemple: je veux que le ton REGEX retourne ce qui suit et arrête la recherche après avoir atteint le mot couleur.

Allumettes:

1159 SAM
1597 ROBERT
1423 CARLOS

Code:

J'ai une longue liste de mots, de caractères et de nouvelles lignes, comment dire à la regex de ne rechercher que le texte entre DEUX MOTS EXACTS sur la liste?

Exemple:

Je veux que le REGEX renvoie le texte suivant et cesse de chercher après avoir atteint le mot couleur.

Allumettes:

1159 SAM
1597 ROBERT
1423 CARLOS

Code:

{
"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
la source
Le formatage et la longueur de cette question vont amener la plupart des utilisateurs à lui donner un -1 ou à essayer de la fermer. Veuillez éditer et nettoyer la question.
Eric F
PARDON! Je ne sais pas comment formater mon code !!!
krimo Vasquez
1
Il y a des boutons sur la fenêtre de l'éditeur, utilisez-les.
gronostaj
J'ai nettoyé votre post un peu. Espérons que cela aide
Eric F

Réponses:

1

Regex est un langage de correspondance de motif. Avec cela, vous définissez uniquement un motif. Il n’existe aucun moyen de garder un compteur pour mémoriser le nombre de correspondances - cela dépend uniquement de l’implémentation utilisant le moteur regex - par exemple, vous pouvez écrire un peu de code dans n’importe quel langage de programmation prenant en charge regex pour conserver le nombre de correspondances et arrête après n des allumettes ont été trouvées. Vous pouvez uniquement construire une expression rationnelle qui correspondra à un groupe donné exactement un nombre prédéfini de fois par répétition de motif. En d'autres termes, répétez votre modèle trois fois pour obtenir trois correspondances. Par exemple:

  • Modèle de base pour match: (expr)
  • Modèle pour une correspondance entre mots limites: boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
  • Modèle pour deux correspondances entre mots limites: boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
  • Modèle pour les trois-fils entre mots limites: boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword

et cetera ... Dans votre cas, "boundaryword" est "couleur".

Avec regex, il n'y a aucun moyen de lui dire de trouver un nombre inconnu de correspondances, puis de s'arrêter à un mot donné. Les méthodes regex classiques recherchent uniquement la première correspondance ou toutes les correspondances de modèle d'un document. Votre problème nécessite une implémentation personnalisée. Dans un langage de programmation, vous pouvez écrire une boucle qui correspond d’abord à la position de borderword, à partir de là, à votre modèle, et continue de faire correspondre ce modèle pour rechercher des éléments consécutifs jusqu’à ce qu’il approche du prochain mot-frontière, où il s’arrête.

pKami
la source