正则表达式 findall python

Regular expression findall python

我有这样的文字

{"@context":"http://schema.org","@type":"Recipe","name":"Tartelette aux fraises et rhubarb'curd","recipeCategory":"tarte aux fraises","image":"https://assets.afcdn.com/recipe/20160527/8530_w1024h768c1cx1941cy2911.jpg","datePublished":"2012-10-10T08:48:00+02:00","prepTime":"PT90M","cookTime":"PT15M","totalTime":"PT105M","recipeYield":"4 personnes","recipeIngredient":["250 g de fraises","150 g de farine","45 g de beurre","40 g de sucre","1 oeuf","1 pinc\u00e9e de sel","20 cl de rhubarbe (r\u00e9cup\u00e9r\u00e9 de ma conception de compote)","3 oeufs","75 g de sucre","1 cuill\u00e8re \u00e0 soupe de ma\u00efzena"],"recipeInstructions":[{"@type":"HowToStep","text":"Pour 4 tartelettes ( ou une grande tarte mais je pr\u00e9f\u00e8re les tartelettes, la p\u00e2te sabl\u00e9e \u00e9tant difficile \u00e0 couper :)) "},{"@type":"HowToStep","text":"Pr\u00e9parer la p\u00e2te sabl\u00e9e : "},{"@type":"HowToStep","text":"Couper le beurre en petits morceaux."},{"@type":"HowToStep","text":"Mettre tous les ingr\u00e9dients dans un saladier et tout m\u00e9langer \u00e0 la main ( ou au robot) jusqu'\u00e0 former une boule homog\u00e8ne. La r\u00e9server au frais au moins 1h pour pouvoir mieux l'\u00e9taler."},{"@type":"HowToStep","text":"Pendant que la p\u00e2te sabl\u00e9es pose, pr\u00e9parer le rhubarb'curd : "},{"@type":"HowToStep","text":"M\u00e9langer le sucre avec le jus de rhubarbe sur feu doux, jusqu\u2019\u00e0 ce que le sucre soit fondu. "},{"@type":"HowToStep","text":"A part, dans un bol (qui pourra aller au bain marie dans l'\u00e9tape suivante), battre la ma\u00efzena avec 1 oeuf. Lorsqu\u2019elle est bien dissoute, incorporer les 2 autres oeufs, toujours en fouettant."},{"@type":"HowToStep","text":"Incorporer ensuite le jus de rhubarbe chaud en fouettant bien, le m\u00e9lange commence \u00e0 \u00e9paissir. Placer le bol au bain marie et faire \u00e9paissir sur feu doux tout en fouettant tr\u00e8s r\u00e9guli\u00e8rement."},{"@type":"HowToStep","text":"Une fois qu\u2019elle est bien \u00e9paisse, transf\u00e9rer dans un autre bol ou saladier pour la refroidir. "},{"@type":"HowToStep","text":"Pendant que le curd refroidit, cuire la p\u00e2te sabl\u00e9e \u00e0 blanc. Etaler la p\u00e2te sabl\u00e9e et la r\u00e9partir dans les 4 moules \u00e0 tartelette (ou dans un grand moule \u00e0 tarte). Puis enfourner entre 10 et 15 min (en fonction de votre four) \u00e0 200\u00b0C (thermostat 6-7)."},{"@type":"HowToStep","text":"Laisser refroidir les fonds une bonne demi heure."},{"@type":"HowToStep","text":"Monter les tartelettes : "},{"@type":"HowToStep","text":"- mettre une couche de rhubarb' curd dans les fonds de tarte"},{"@type":"HowToStep","text":"- laver et \u00e9queuter les fraises"},{"@type":"HowToStep","text":"- les couper en 2 et les disposer sur le rhubarb'curd."},{"@type":"HowToStep","text":"- conserver au frais avant de servir"}],

在 RecipeInstructions 字段中,我需要在 "text": 之后写入所有内容。我从来没有用过正则表达式,我有点迷路了。

这看起来像一个 json 对象,但周围没有 [] 以使其成为实际列表。您应该能够将其转换为 Python 本机词典列表并进行导航:

import json

recipe = json.loads('[' + your_text + ']')
steps = [obj["text"] for obj in recipe if obj.get("@type") == "HowToStep"] 

但让我担心的是,除非您在此处将文本截断为 post,否则这可能不是格式正确的 json。在这种情况下,您不能使用上面的代码,而是使用像这样的正则表达式:

import re

regex = r"\"text\":\"([^\"]*)\""
matches = re.findall(regex, your_text) 

'matches' 现在应该是所有文本元素的列表。

想知道这个正则表达式的工作原理吗? Here's a simulator