2013-09-06 1 views
1

add(ten)sub(one)과 같은 문자열을 add(ten) sub(one)으로 분할하려고합니다. 닫기 괄호와 일치시키는 방법을 알아낼 수 없습니다. 나는 re.sub(r'\\)', '\\) ')과 괄호를 벗어나는 모든 변형을 사용했다. 나는 생각할 수있다. 이 글꼴로 말하기는 어렵지만이 명령들 사이에 공백을 추가하여 나중에 목록으로 나눌 수 있습니다. 이 문자열에 일치하기 위해이 탈출해야하므로 대체 문자열에서 )을 탈출 할 필요가 없습니다re 또는 str.split() python에서 괄호를 구분 기호로 사용

+0

분명히하십시오. 출력을 문자열 ""add (ten) sub (one) "'또는리스트 [["add (ten) ","sub (one) "]'또는 다른 것으로 만드시겠습니까? 당신은 [backticks] (http://en.wikipedia.org/wiki/Backtick)에 코드를 넣어 코드의 잘못된 포맷을 방지 할 수 있습니다. (물결표 아래에있는 문자) – Kevin

+0

그냥 공백을 추가하면 목록을 얻으려면 다른 줄로 나누기를 사용하는 것이 좋습니다 – user2755466

답변

1

, ) 만 정규식 패턴에서 특별한 특별한 의미를 가지고 있지만, 일반 문자열이 될 수 있습니다 있는 그대로 사용됩니다. @StevenRumbalski는 str.replacestr.rstrip를 사용하여 위의 작업을 간단하게 할 수있는 코멘트 지적

>>> strs = "add(ten)sub(one)" 
>>> re.sub(r'\)(?=\S)',r') ', strs) 
'add(ten) sub(one)' 

:

>>> strs.replace(')',') ').strip() 
'add(ten) sub(one)' 
+1

이 대체는 정규식이 필요하지 않을 정도로 간단합니다. strs = strs.replace (')', ') ')'. 최종 공간을 제거하려면 끝에'.strip()'을 추가하십시오. –

+0

이 파일은 3.3.2 쉘에서 작동하지 않으며 공백없이 같은 문자열을 얻습니다. – user2755466

+1

@ user2755466 : 결과를 변수 이름에 다시 할당 하시겠습니까? 그렇지 않으면 파이썬에서 문자열이 변경되지 않아 결과가 손실됩니다. –

0

모든 문자열의 목록을 작성

import re 

a = 'add(ten)sub(one)' 
print [ b for b in re.findall('(.+?\(.+?\))', a) ] 

출력 :

['add(ten)', 'sub(one)'] 
1
d = ')' 
my_str = 'add(ten)sub(one)' 
result = [t+d for t in my_str.split(d) if len(t) > 0] 

결과 = [add (ten) ','sub (one) ']

관련 문제