2012-10-20 2 views
3

명령 줄에서 '\ t'(탭)와 같은 구분 기호를 받고 텍스트 파일을 구문 분석하는 데 사용하고 싶습니다. 내가python에서 명령 줄에서 정규식을 수신하는 방법

$ python mycode.py "\t" 

구분 기호 '\\t' 즉이다 명령 줄에서

delimiter = sys.argv[1] 
코드에

및 유형을 넣으면

는, 파이썬은 그대로 입력 문자열을 보존하기 위해 그 일을한다.

내가 예를 들어, 사용할 수 있도록 '\의 t'이 변환하고자,

'a\tb\tc'.split(delimiter) 

['a','b','c']를 얻을 수 있습니다.

'\'을 '\'로 변환하려고했지만 실패했습니다.

정규식을 명령 줄에서 처리 할 수있는 내장 파이썬 함수가 있습니까?

+1

[re.split()] (http://docs.python.org/library/re.html#re.split)을 사용하지 않는 이유는 무엇입니까? – Aprillion

답변

2

파이썬 2에서 당신이 str.decode('string_escape') 사용할 수 있습니다

>>> '\\t'.decode('string_escape') 
'\t' 

파이썬 3에서 사용 후 첫 번째 바이트 문자열을 인코딩해야 unicode_escape :

>>> '\\t'.encode().decode('unicode_escape') 
'\t' 

두 솔루션은 어떤 이스케이프 시퀀스를 수용하고 올바르게 디코드하므로 유니 코드 유니 코드를 사용할 수도 있습니다.

>>> '\\t\\n\\u2665'.encode().decode('unicode_escape') 
'\t\n♥' 
+0

이것이 제 문제에 대한 가장 간단한 해결책이라고 생각합니다. 나는 틀린 키워드를 찾고 있었다는 것을 본다. 감사합니다 여러분! – pyrookie

0

정말 당신이 찾고있는 정규 표현식이 아니에요, 그것은 이스케이프 시퀀스입니다.

당신은 만큼 당신이 끔찍한 보안 결과에 완벽하게 알고있는 한, eval를 사용하거나 자신의 문자열 교체/정규 표현식을 기반으로 이스케이프 시퀀스 unescaper 롤 수 있습니다.

는 (누가 알 겠어요, 아마 arg = arg.replace("\\t", "\t") 당신을 위해 충분?)

해결 방법으로 당신이 (AB)에

$ python mycode.py `echo -ne '\t'` 

을 할 수있는 유닉스가 당신을 위해 이스케이프 취소 할 명령을 에코 사용합니다.