2015-02-01 14 views
0

파이썬에서 터미널 및 문자열을 입력으로 사용하고 터미널별로 문자열을 분할하는 작은 함수를 작성해야합니다. 는 그렇게 말 :정규 표현식 내부에서 루프를 거치고 있습니다.

terminals=['true','/','false'] 

과 :

string="false false/true" 

출력해야한다 :

'false', 'false','/','true'. 

내가 문제 정규 표현식을 쓰는이, 내가 루프를 통합하는 방법을 모르는 단자의 모든 요소를 ​​통과 할 것이다.

import re 
def tokenize(terminals,stringline): 
    tokens = [t for t in re.split(r"(\s+|true|false\|\)")] 

제게 어떤 힌트를 주시겠습니까?

+0

어디 공백은 예에 갔습니까? –

답변

0

re.split 대신 re.findall 함수를 사용해야합니다. 구분 기호를 유지하기 위해 re.split 정규식에서 그룹을 캡처

>>> terminals=['true','/','false'] 
>>> string="false false/true" 
>>> regex = '|'.join(terminals) 
>>> re.findall(regex, string) 
['false', 'false', '/', 'true'] 

또는

사용.

>>> string="false false/true" 
>>> [i for i in re.split(r'(true|false|/)|\s+', string) if i is not None and i] 
['false', 'false', '/', 'true'] 

또는

>>> def tokenize(terminals,stringline): 
     regex='|'.join(terminals) 
     return [i for i in re.split('('+ regex + ')' +r'|\s+', stringline) if i is not None and i] 

>>> terminals=['true','/','false'] 
>>> string="false false/true" 
>>> tokenize(terminals, string) 
['false', 'false', '/', 'true']