Как я могу разделить строку на токены?
если у меня есть строка
'x+13.5*10x-4e1'
как я могу разделить его на следующий список токенов?
['x', '+', '13', '.', '5', '*', '10', 'x', '-', '4', 'e', '1']
в настоящее время я использую модуль shlex:
str = 'x+13.5*10x-4e1'
lexer = shlex.shlex(str)
tokenList = []
for token in lexer:
tokenList.append(str(token))
return tokenList
но это возвращает:
['x', '+', '13', '.', '5', '*', '10x', '-', '4e1']
поэтому я пытаюсь разделить буквы от чисел. Я рассматриваю возможность взять строки, содержащие как буквы, так и цифры, а затем каким-то образом разделить их, но не уверен, как это сделать или как добавить их все обратно в список с другими впоследствии. Важно, чтобы маркеры оставались в порядке, и у меня не может быть вложенных списков.
в идеальном мире e и E не были бы признаны буквами одинаково, поэтому
'-4e1'
станет
['-', '4e1']
но
'-4x1'
станет
['-', '4', 'x', '1']
может кто-нибудь помочь?
3 ответов
другая альтернатива, не предложенная здесь, заключается в использовании в nltk.tokenize модуль
ну, проблема, кажется, не совсем проста. Я думаю, хороший способ получить надежное (но, к сожалению, не такое короткое) решение-использовать Python Lex-Yacc для создания полноразмерного токенизатора. Lex-Yacc является общей (не только Python) практикой для этого, поэтому могут существовать готовые грамматики для создания простого арифметического токенизатора (как это), и вы должны просто соответствовать им вашим конкретным потребностям.