2012-06-07 4 views
9

나는 파이썬을 배우려고 노력하고 있는데, 나는 그것에 아주 익숙하다. 나는이 부분을 이해할 수 없다. 기본적으로, 지금 내가하고있는 것은 웹 페이지의 소스 코드를 가져 와서 단어가 아닌 모든 것을 추출하는 것입니다.파이썬에서 하나의 를 얻을 수 없다.

웹 페이지에는 \ n과 \ t가 많이 포함되어 있으며 \을 (를) 찾을 수있는 항목을 원하고 다음 항목과 모든 항목을 삭제합니다.

def removebackslash(source): 
    while(source.find('\') != -1): 
     startback = source.find('\') 
     endback = source[startback:].find(' ') + startback + 1 
     source = source[0:startback] + source[endback:] 
    return source 

입니다. \'은 문자열을 닫지 않지만 \\\으로 변경하면이 문자열이 \\으로 해석됩니다. 나는 해석 된 것을 알아낼 수 없다. '\'

+6

백 슬래시를 이스케이프 처리해야하기 때문입니다. 이렇게 :'source.find ('\\')'. – elmigranto

+5

당신은 \ n이 2 문자라고 생각합니다. 그것들은 하나가 아니기 때문에 \와 n 또는 r 사이의 모든 것을 건너 뛸 수는 없습니다. 왜냐하면 2 문자가되어야하기 때문입니다. – uselpa

+0

코드 강조 표시를위한 Btw 시계. 이 경우 소스가 잘못되어 잘못되었습니다. 이와 같은 보조 지표는 너무 많은 시간을 낭비하지 않고 버그를 찾는 데 유용합니다. –

답변

18

\은 이스케이프 문자이다. 그것은 문자에 특별한 의미를 부여하거나 상기 특별한 의미를 버린다. 지금은 닫는 작은 따옴표를 이스케이프 처리하고 리터럴 작은 따옴표로 취급합니다. 리터럴 백 슬래시를 삽입하려면이 문자를 이스케이프 처리해야합니다.

def removebackslash(source): 
    while(source.find('\\') != -1): 
     startback = source.find('\\') 
     endback = source[startback:].find(' ') + startback + 1 
     source = source[0:startback] + source[endback:] 
    return source
+1

이것은 어디서나 읽을 수 있지만,이 변경을하면 소스에서 '\\'을 (를) 검색합니다. – fnsjdnfksjdb

+2

@fnsjdnfksjdb : 아니요. 정말로 시도해보십시오. http://codepad.org/BXherX82 – Ryan

+1

나는 그것을 시도했다. 그런 다음 문제가 다른 곳에서 발생할 수 있는지 확인하기 위해 함수 외부에서 수행했습니다. 소스 [source.find ('\\') :]를 인쇄 할 때 \\로 시작합니다. 매번 "blahblahblah \ andstuff".find ('\\')는 -1로 평가됩니다. – fnsjdnfksjdb

2

SO 자동 서식에 문제가 표시됩니다. \은 문자를 이스케이프 처리하는 데 사용되므로 끝 인용 부호를 이스케이프 처리합니다. (큰 따옴표의 사용에주의) 해당 라인을 변경해보십시오 :

while(source.find("\\") != -1): 

는 이스케이프 문자에 대한 자세한 내용을 in the docs.

7

대체 사용해보십시오 :

str.replace(old, new[, count]) 

반환에게 문자열의 복사본을 모두와 함께 substring old의 발생이 new로 대체되었습니다. 선택적 인수 count가 주어지면 첫 번째 count 어커런스 만 대체됩니다. 따라서 귀하의 경우

은 : 다른 사람이 말했듯이

my_text = my_text.replace('\n', '') 
my_text = my_text.replace('\t', '') 
3

, 당신은 '\\'를 사용해야합니다. 이것이 효과가 없다고 생각하는 이유는 결과를 얻을 때 두 개의 백 슬래시로 시작하는 것처럼 보이기 때문입니다. 하지만 그들은 두 개의 백 슬래시로 시작하지 않습니다. 단지 파이썬 두 개의 백 슬래시를 보여줍니다. 그렇지 않은 경우 줄 바꿈 (\n으로 표시)과 백 슬래시 뒤에 문자 n (\\n으로 표시)의 차이를 알 수 없습니다.

실제 진행 상황을 확인하는 방법에는 두 가지가 있습니다. 하나는 탈출을 확장하는 데 원인이 결과에 인쇄를 사용하는 것입니다 :

>>> x = "here is a backslash \\ and here comes a newline \n this is on the next line" 
>>> x 
u'here is a backslash \\ and here comes a newline \n this is on the next line' 
>>> print x 
here is a backslash \ and here comes a newline 
this is on the next line 
>>> startback = x.find('\\') 
>>> x[startback:] 
u'\\ and here comes a newline \n this is on the next line' 
>>> print x[startback:] 
\ and here comes a newline 
this is on the next line 

또 다른 방법은 문자열의 길이를 확인하기 위해 len을 사용하는 것입니다 len(x[startback:])가 3

>>> x = "Backslash \\ !" 
>>> startback = x.find('\\') 
>>> x[startback:] 
u'\\ !' 
>>> print x[startback:] 
\ ! 
>>> len(x[startback:]) 
3 

공지 것을을 문자열에는 백 슬래시, 공백 및 느낌표의 세 가지 문자가 포함됩니다.당신은 단지 백 슬래시가 포함 된 문자열을 보면 훨씬 더 간단하게 무슨 일이 일어나고 있는지 볼 수 있습니다 : 그것은 두 개의 백 슬래시로 시작처럼

>>> x = "\\" 
>>> x 
u'\\' 
>>> print x 
\ 
>>> len(x) 
1 

x 만이 그것의 사용, 그렇지 않으면 대화 형 프롬프트에서 그것을 평가 (또는 때 보이는 __repr__ 방법). 실제로 인쇄 할 때 백 슬래시가 하나 뿐인 것을 볼 수 있습니다. 길이를 보면 한 문자 만 볼 수 있습니다.

이 의미는 find에서 백 슬래시를 이스케이프 처리해야하며 출력에 표시된 백 슬래시도 배가 될 수 있음을 인식해야합니다.

2

나는 아직 아무도 이것을 언급하지 않았지만, 당신이 문자를 벗어나야하는 것을 처리하고 싶지 않다면 그냥 원시 문자열을 사용하십시오. R 문자열 전에 편지를 추가

source.find(r'\') 

파이썬은 특수 문자를 해석하지 않도록 지시하고 당신이 그것을 정확히 입력 문자열을 유지합니다.

+0

그래도 여전히 문자열의 끝을 이스케이프합니다. – Ryan

관련 문제