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"
Réponses:
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:
(expr)
boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
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.
la source