Python Разделить строку, используя более одного символа, сохраняя при этом этот символ - PullRequest
1 голос
/ 24 февраля 2020

Я видел много решений, использующих re.split, но это не решает мою проблему. Я хочу иметь возможность разбить мою строку и сохранить некоторые символы в списке ... Трудно объяснить, но вот пример:

Текст:

'print("hello world");'

результат I want:

["print", "(", "\"", "hello", "world", "\"", ")", ";"]

Что-то вроде re.split даст мне:

["print", "hello", "world"]

Как мне получить желаемый результат?

Ответы [ 2 ]

7 голосов
/ 24 февраля 2020

Вы можете попробовать это.

import re
text='print("hello world");'
parsed=re.findall(r'(\w+|[^a-zA-Z\s])',text)
print(parsed)
#['print', '(', '"', 'hello', 'world', '"', ')', ';']

\w+ - захватить каждое слово.

[^a-zA-Z\s] - захватить все, что не в [a-zA-Z] и не является пробелом .

РЕДАКТИРОВАТЬ: Если вы хотите захватить числа и числа с плавающей запятой, используйте это re выражение \d+\.\d+|\d+|\w+|[^a-zA-Z\s]

\d+ - Для захвата чисел \d+\.\d+ - Для захватить поплавки.

a='print("hello world",[1,2,3,4,3.15]);'
print(re.findall('\d+\.\d+|\d+|\w+|[^a-zA-Z\s]',a)
#['print', '(', '"', 'hello', 'world', '"', ',', '[', '1', ',', '2', ',', '3', ',', '4', ',', '3.15', ']', ')', ';']
3 голосов
/ 24 февраля 2020

Попробуйте это:

import re
re.findall(r"[A-Za-z@#]+|\S", 'print("hello world");')

Out[19]: ['print', '(', '"', 'hello', 'world', '"', ')', ';']
...