Есть ли противоположность string.format () в python для установки / извлечения значений из строки - PullRequest
2 голосов
/ 06 ноября 2019

Я пытаюсь разобрать строку в Python для извлечения значений. Мы знаем, что строки могут быть отформатированы из переменных следующим образом:

food = {'fruit':'apple',  'vegetable':'carrot'}
sentence = "I ate a {fruit} and a {vegetable} today".format(**food)

Есть ли способ сделать обратное? Извлечь значения из известного текстового шаблона? Примерно так:

food = sentence.extract("I ate a {fruit} and a {vegetable} today")
# food gets set as dictionary {'fruit':'apple',  'vegetable':'carrot'}
  1. Извлечение из позиций строки недостаточно, потому что я хочу убедиться, что остальная часть предложения соответствует формату
  2. Разбор текста, разбивка натекст может иметь непреднамеренные последствия для больших предложений с большим количеством позиционных текстовых значений для извлечения

В идеале, при поиске подходящего однострочного текста, можно вставить лямбда-выражение без пользовательских функций. В настоящее время я делаю 2, но я чувствую, что должен быть лучший способ.

Ответы [ 2 ]

4 голосов
/ 06 ноября 2019

Вы описываете базовое использование parse:

>>> from parse import parse
>>> sentence = 'I ate a apple and a carrot today'
>>> template = 'I ate a {fruit} and a {vegetable} today'
>>> parse(template, sentence).named
{'fruit': 'apple', 'vegetable': 'carrot'}
2 голосов
/ 06 ноября 2019

Да, это можно сделать, используя регулярное выражение с именованными группами :

import re
sentence = "I ate a apple and a carrot today"
matches = re.match(r"I ate a (?P<fruit>.*?) and a (?P<vegetable>.*?) today", sentence) 
print(matches.groupdict())

напечатает

{'fruit': 'apple', 'vegetable': 'carrot'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...