Регулярное выражение findall python - PullRequest
0 голосов
/ 20 марта 2019

У меня есть текст, который выглядит так

{"@ 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 г de fraises "," 150 г de farine "," 45 г de beurre "," 40 г de sucre "," 1 oeuf "," 1 pincé 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 ":" Налейте 4 тарталетки (тарталетки из разных сортов, лёгкие тарталетки, саблезубые сабли),} {"@type": "HowToStep", "text": "Pr \ u00e9parer la p \ u00e2te sabl \ u00e9e:"}, {"@ type": "HowToStep", "text": "Couper le beurre en petits morceaux" . "}, {" @ type ":" HowToStep "," text ":" Mettreous les ingr \ u00e9dients dans un salierier et tout m \ u00e9langer \ u00e0 la main (ou au robot) jusqu '\ u00e0 бывший унисульский гомог "У меня есть сервер. 1 час за день".}, {"@ t ype ":" HowToStep "," text ":" Pendant que p p u ubee2te sabl \ u00e9es pose, pr \ u00e9parer le rhubarb'curd: "}, {" @ type ":" HowToStep "," text ":" M «Удовлетворение успехов в духовном деле», «Правильное наследство». "}, {" @ type ":" HowToStep "," text ":" Часть, которая не имеет смысла (qui pourra аллергию, которую вы хотите найти), одна из следующих статей: 1 ". Lorsqué est bien dissute, incorporer les 2 autou oufs, toujours en fouettant. "}, {" @ Type ":" HowToStep "," text ":" Incorporer ensuite le jus de rhubarbe chaud en fouettant bien, le m \ u00 начать работу. Россыпь сыновей Марии и Фаиреи Фаи Фо Тетан Фоэтан Троутан. "}, {" @ Type ":" HowToStep "," text ":" Une fois qu \ u2019elle est bien " Это может быть лучше, чем когда-либо. "}, {" @ type ":" HowToStep "," text ":" Переопределение в режиме ожидания "," cuble la pabul ". Это тарталетка с надписью «4 мес.» (Т. Д.). Ввод в действие 10 и 15 минут (функция четыре) \ 200 / 0C (термостат 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 ' творожный набор "}, {" @ type ":" HowToStep "," text ":" - laver et \ u00e9queuter les fraises "}, {" @ type ":" HowToStep "," text ":" - Вы можете использовать его для удаления ревеня. "}, {" @ type ":" HowToStep "," text ":" - conserver au frais avant de servir "}],

В поле RecipeInstructions мне нужно заставить все писать после «текста»:. Я никогда не использовал регулярные выражения, и я немного растерялся.

1 Ответ

0 голосов
/ 20 марта 2019

Это похоже на объект json, но вокруг него нет [], чтобы сделать его реальным списком. Вы должны быть в состоянии преобразовать его в собственный список словарей Python и перемещаться по нему:

import json

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

Что меня беспокоит, так это то, что, если вы не урезали свой текст для публикации здесь, это может быть не совсем правильно сформированный json. В этом случае вы не можете использовать приведенный выше код и вместо этого использовать регулярные выражения, подобные этому:

import re

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

'совпадения' теперь должны быть списком всех текстовых элементов.

Вам интересно, как работает это регулярное выражение? Вот симулятор

...