Как разбить строку на конкретные ключевые слова? - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь разбить строку на конкретные ключевые слова. У меня есть список ключевых слов / символов.

, например: у меня есть список ключевых слов {'1', '2', '3', '4', '5', 'let', 'while'}

, и у меня есть строка let2while4

Я хочувывести список, содержащий {'let', '2', while', '4'}

Возможно ли это? В настоящее время у меня есть только его разделение с использованием разделителя с ''

Спасибо!

РЕДАКТИРОВАТЬ: Использование ответа Гилча ниже работает для примера ниже, но когда я добавляю свои полные ключевые слова, яполучить эти ошибки:

Traceback (most recent call last):
File "parser.py", line 14, in <module>
list = re.findall(f"({'|'.join(keywords)})", input)
File "/usr/lib/python3.7/re.py", line 223, in findall
File "/usr/lib/python3.7/sre_parse.py", line 816, in _parse
p = _parse_sub(source, state, sub_verbose, nested + 1)
File "/usr/lib/python3.7/sre_parse.py", line 426, in _parse_sub
not nested and not items))
File "/usr/lib/python3.7/sre_parse.py", line 651, in _parse
source.tell() - here + len(this))
re.error: nothing to repeat at position 17

Мои полные ключевые слова включают в себя:

words = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'х', 'у', 'Z', '+', '-', '*', '>', '(',»)», ';', '$', 'пусть', 'в то время как', 'еще', '='}

1 Ответ

5 голосов
/ 15 октября 2019

Используйте '|'.join() для создания шаблона регулярного выражения из ваших ключевых слов.

>>> keywords = {'1', '2', '3', '4', '5', 'let', 'while'}
>>> string = 'let2while4'
>>> import re
>>> re.findall('|'.join(keywords), string)
['let', '2', 'while', '4']
>>> set(_)
{'let', '2', 'while', '4'}

Если ваши ключевые слова могут содержать управляющие символы регулярного выражения, вы можете использовать re.escape() на них перед объединением.

>>> re.findall('|'.join(map(re.escape, keywords)), string)
...