Как мне разбить следующую строку Python на список строк? - PullRequest
2 голосов
/ 07 марта 2020

У меня есть строка 'Predicate(big,small)'

Как из этого извлечь следующий список строк, ['Predicate','(','big',',','small',')']

Имена могут быть потенциально любыми, а также могут быть пробелы между такими элементами (мне нужно убрать пробел из списка), Predicate (big, small)

Пока я пробовал это, но это явно не тот результат, который я хочу

>>> str1 = 'Predicate(big,small)'
>>> list(map(str,str1))

Выход:

['P', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', '(', 'b', 'i', 'g', ',', 's', 'm', 'a', 'l', 'l', ')']

Ответы [ 2 ]

4 голосов
/ 07 марта 2020

Вы можете использовать re.split(), чтобы разделить вашу строку на ( или ). Вы можете захватить разделители в регулярном выражении, чтобы включить их в окончательный вывод. В сочетании с str.strip() для обработки пробелов и фильтрации любых конечных пустых строк вы получите что-то вроде:

import re

s = 'Predicate ( big ,small )'
[s.strip() for s in  re.split(r'([\(\),])', s.strip()) if s]
# ['Predicate', '(', 'big', ',', 'small', ')']
3 голосов
/ 07 марта 2020

Вы можете использовать re здесь.

import re
text='Predicate(big,small)'
parsed=re.findall(r'\w+|[^a-zA-Z,\s])
# ['Predicate', '(', 'big', 'small', ')']
  1. \w+ соответствует любому символу слова (равен [a-zA-Z0-9_]).
  2. [^a-zA-Z,\s] соответствует одному символ отсутствует в списке.
  3. \s для соответствующего пробела.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...