J'essaie d'analyser l'objet JSON du texte avec Python Regex. J'ai trouvé ce match: mais dans python, je reçois cette erreur: p> voir la correspondance de regex dans Cet exemple RegEx101 . P> P>
3 Réponses :
Thas est parce que le module Python re code> est assez faible et ne prend pas en charge les sous-routine et la récursivité. Essayez PYPI Regex code> Module. Cela compilera votre regex. P>
Quel est le "niveau pcre"? Nulle part REGEX CODE> RÉCLAMATION DE PCRE Compatible (fonctionnalité ou syntaxe sage).
Mais il soutient la plupart des caractéristiques de PCRE
@ Martijnpieters OK, a changé. Mais je ne vois pas une raison pour un bowvote. J'ai proposé une solution pour la question qui fonctionne.
Vous avez trouvé une regex qui utilise la syntaxe que la bibliothèque standard Python Lorsque vous regardez le lien REGEX101, vous verrez que le motif fonctionne lors de l'utilisation du Bibliothèque de pratiques et la problématique Vous pouvez installer le re code> ne prend pas en charge. (? r) code> syntaxe qui Jette l'erreur utilise une fonctionnalité appelée récursion em> . Cette fonctionnalité est uniquement prise en charge par un sous-ensemble des moteurs Regex . P> regex code> bibliothèque , un autre moteur de regex pour python qui explicitement Soutenir cette syntaxe: P> >>> demo_text = """\
This is a funny text about stuff,
look at this product {"action":"product","options":{"foo": "bar"}}.
More Text is to come and another JSON string, neatly delimited by "{" and "}" characters:
{"action":"review","options":{"spam": ["ham", "vikings", "eggs", "spam"]}}
"""
>>> for result in extract_json_objects(demo_text):
... print(result)
...
{'action': 'product', 'options': {'foo': 'bar'}}
{'action': 'review', 'options': {'spam': ['ham', 'vikings', 'eggs', 'spam']}}
Merci beaucoup. J'utilise le module "regex" et ça marche maintenant;)
Heureux d'avoir été de l'aide! N'hésitez pas à Acceptez ma réponse si vous pensez que cela vous a été utile . :-)
Si c'est utile, je suis Frankenstein'ed extrayant_json_objects () code> pour fournir également le texte environnant, de sorte qu'un utilisateur puisse choisir JSON-Pletinty les objets avec la chaîne qui le contenait. Adam peut être trouvé ici .
S'il n'y a qu'un seul JSON en une seule ligne, vous pouvez utiliser les méthodes d'index pour rechercher le premier et le dernier support pour sélectionner le JSON:
firstValue = jsonString.index("{")
lastValue = len(jsonString) - jsonString[::-1].index("}")
jsonString = jsonStringEncoded[firstValue:lastValue]
C'est parce que ce n'est pas une syntaxe soutenue par l'analyseur Python Regex. Il n'y a pas de norme universelle de la syntaxe de regex pris en charge par tous les moteurs.
Bottom Line: Ne copiez pas uniquement des modèles de regex des emplacements aléatoires et attendez-vous à ce qu'ils travaillent dans des moteurs de regex aléatoires. Au minimum Eduquez-vous un peu sur Regex . Récursion est pris en charge dans Perl, Ruby et et les langues qui utilisent la bibliothèque de pratiques , d'autres langues Besoin d'utiliser des bibliothèques tiers, si disponibles.