Разделение символов из строки с определенными символами и другими символами - PullRequest
0 голосов
/ 29 сентября 2019

Я написал код для выделения определенного символа из списка символов, но он глючит и не работает должным образом. Я надеюсь, что кто-то сможет уточнить и помочь мне.

Что я хотел бы сделать, это разбить эту строку (например) - 'game.run();' на этот список строк - ['game','.','run','(', ')',';'], где список символов -

Symbollst = [
        '{' , '}' , '(' , ')' , '[' , ']' , '.' ,
        ',' , ';' , '+' , '-' , '*' , '/' , '&' ,
        ',' , '<' , '>' , '=' , '~'
        ]

Мой исходный код:

 for token in r_splitted :
    if any(x in token for x in Symbollst) :
        TokenInSymbol = [i in token for i in Symbollst]
        new_token = token.split(Symbollst[TokenInSymbol.index(True)])
        new_token.insert(1,Symbollst[TokenInSymbol.index(True)])
        for i in new_token :
            if i=='' : continue
            self.TokenList.append(i)

Примечание. Это часть задачи компилятора Nand2Tetris.

1 Ответ

0 голосов
/ 30 сентября 2019

Хорошо, я подумал об этом за ночь и придумал решение, использующее список (токен) для разделения каждого символа и индивидуальной обработки:

Symbollst = [
        '{' , '}' , '(' , ')' , '[' , ']' , '.' ,
        ',' , ';' , '+' , '-' , '*' , '/' , '&' ,
        ',' , '<' , '>' , '=' , '~'
        ]

token = 'game.run();'
temp_token = list(token)
new_token=[]
string=''

for i in temp_token :
    if i in Symbollst :
        if not string=='' : new_token.append(string)
        new_token.append(i)
        string=''
    else : string = string + i

print new_token

, поэтому для ввода -

token = 'game.run();'

вывод будет:

new_token = ['game', '.', 'run', '(', ')', ';']
...