Есть ли способ с помощью регулярного выражения, python или javascript искать точку, слово, а затем определение и после этого добавить его в словарь или другой объект?

Например:

. Возврат: Возврат снова возвращается к предыдущему состоянию или состоянию. Риторика: Риторика - это умение или искусство использовать язык для убеждения или влияния на людей, особенно язык, который звучит впечатляюще, но может быть неискренним или честным.

Это станет {"Reversion" : "A reversion is turning back again to a previous state or condition", "Rhetoric" : "Rhetoric is the skill or art of using language to persuade or influence people, especially language that sounds impressive but may not be sincere or honest" }

2
python123 3 Фев 2021 в 10:04

4 ответа

Лучший ответ

Взгляните на этот код:

my_final_result = {}
input_str = ". Reversion: A reversion is turning back again to a previous state or condition. Rhetoric: Rhetoric is the skill or art of using language to persuade or influence people, especially language that sounds impressive but may not be sincere or honest."
# assuming that periods don't occur in definitions and only separate the particular definition from another
input_list = input_str.split(".")
for definition in input_list:
    definition_list = definition.split(":")
    if len(definition_list) == 2:  # check if definition is correct
        # save our key-value pair to dictionary. strip() deletes some possible spaces around the words
        my_final_result[definition_list[0].strip()] = definition_list[1].strip()
print(my_final_result)
3
Szymon Kowaliński 3 Фев 2021 в 07:27

Регулярное выражение для фильтрации слова и определения:

\.\s*([^:]*)\s*:\s*([^.]*)

Демо: https://regex101.com/r/utgrCb/1/

  • \.\s* начальная точка и необязательные пробелы
  • ([^:]*) слово - это все до двоеточия
  • \s*:\s* двоеточие, окруженное необязательными пробелами
  • ([^.]*) "определение" - это все до последней точки
4
alex-dl 3 Фев 2021 в 07:22

Я хотел использовать сокращение, но в итоге получил это

const str = `Reversion: A reversion is turning back again to a previous state or condition. Rhetoric: Rhetoric is the skill or art of using language to persuade or influence people, especially language that sounds impressive but may not be sincere or honest.`

const dict = {}
const arr = str.split(/[$\.]?(\w+): /g).slice(1)
for (let i=0;i<arr.length-1;i+=2) {
  dict[arr[i]] = arr[i+1].trim()
}
console.log("dict",dict)
2
mplungjan 3 Фев 2021 в 07:20

Я вставил несколько предложений в исходное предложение таким образом, чтобы показать, что это решение может получить шаблон в любом месте текста.

Я использовал reduce, чтобы преобразовать результат matchAll в объект.

x = `asoidn aiosjdn yaosui noapids poasm daioansoid apaoms d. Reversion: A reversion is turning back again to a previous state or condition. aasd aeoinad oianfds inauireb docn isenm opisd a. Rhetoric: Rhetoric is the skill or art of using language to persuade or influence people, especially language that sounds impressive but may not be sincere or honest.`;

matches = [...x.matchAll(/(\w+)\s*:\s*([^.:]+.)/g)];

obj = matches.reduce((dict, [_, name, text]) => (dict[name] = text, dict), {});

console.log(obj);
2
Andre Marasca 3 Фев 2021 в 15:42
66022702