복붙노트

[PYTHON] 파이썬 원시 문자열과 후행 백 슬래시

PYTHON

파이썬 원시 문자열과 후행 백 슬래시

나는 한 번에 뭔가를 훑어 보았고 그것이 파이썬 "버그"인지 아니면 적어도 오판인지 궁금해했습니다. 나는 누군가가이 행동에 대한 정당화를 안다면 궁금하다. 필자는 지금까지 "Pythonista Like Pythonista"라는 책을 읽은 것으로 생각했다. 파이썬의 2.x 라인에 대해서만 잘 알고 있습니다.

원시 문자열은 접두어가 r 인 문자열입니다. 정규 표현식에서 백 슬래시를 사용할 수 있고 모든 것을 모두 이중화 할 필요가 없기 때문에 이것은 훌륭합니다. Windows에서 사용 가능한 스크립트를 작성하는데도 유용하므로 백 슬래시도 사용할 수 있습니다. (나는 슬래시도 사용할 수 있지만 슬레이어 스크립트에는 종종 Windows의 다른 위치에서 잘라내어 붙여 넣기 된 내용이 포함되어 있음을 알고 있습니다.)

그래서 큰! 물론 문자열이 백 슬래시로 끝나기를 원하지 않는 한. '원시'문자열로이를 수행 할 방법이 없습니다.

In [9]: r'\n'
Out[9]: '\\n'

In [10]: r'abc\n'
Out[10]: 'abc\\n'

In [11]: r'abc\'
------------------------------------------------
   File "<ipython console>", line 1
     r'abc\'
           ^
SyntaxError: EOL while scanning string literal


In [12]: r'abc\\'
Out[12]: 'abc\\\\'

닫는 따옴표 앞에 하나의 백 슬래시가 있으면 오류가 발생하지만 두 개의 백 슬래시는 두 개의 백 슬래시를 제공합니다. 확실히 나는 이것으로 인해 괴롭혀지는 유일한 사람이 아닙니까?

'원시'문자열이 '백 슬래시 따옴표'를 제외하고 '원시'인 이유에 대한 생각? 내 말은, 거기에 작은 따옴표를 넣고 싶으면 문자열 주위에 큰 따옴표를 사용하는 것입니다. 반대의 경우도 마찬가지입니다. 둘 다 원한다면 나는 단지 삼중 인용문 일 뿐이다. 원시 문자열에서 연속적으로 3 개의 따옴표를 원한다면 거래해야한다고 생각하지만 적절한 행동이라고 생각하십니까?

백 슬래시가 경로 구분 기호 인 Windows의 폴더 이름에는 특히 문제가 있습니다.

해결법

  1. ==============================

    1.FAQ입니다.

    FAQ입니다.

    이에 대해 "문자열은 백 슬래시로 끝나기를 원합니다. 원시 문자열로는 할 수 없습니다.": FAQ에서는이를 해결하는 방법을 보여줍니다.

    >>> r'ab\c' '\\' == 'ab\\c\\'
    True
    >>>
    
  2. ==============================

    2.원시 문자열은 대개 백 슬래시가 필요없는 정규식 패턴을 읽기 쉽도록 작성하기위한 것입니다. Windows에서 편리하게 사용할 수있는 사고입니다 (어쨌든 대부분 슬래시를 사용할 수 있습니다 - Python의 기초가되는 Microsoft C 라이브러리는 두 형식 중 하나를 허용합니다!). 문제의 사고를 강화하기 위해 작은 따옴표와 큰 따옴표가 모두 포함 된 정규식 패턴을 작성하는 것은 거의 불가능합니다.

    원시 문자열은 대개 백 슬래시가 필요없는 정규식 패턴을 읽기 쉽도록 작성하기위한 것입니다. Windows에서 편리하게 사용할 수있는 사고입니다 (어쨌든 대부분 슬래시를 사용할 수 있습니다 - Python의 기초가되는 Microsoft C 라이브러리는 두 형식 중 하나를 허용합니다!). 문제의 사고를 강화하기 위해 작은 따옴표와 큰 따옴표가 모두 포함 된 정규식 패턴을 작성하는 것은 거의 불가능합니다.

    ( "거의"삼중 인용은 거의 항상 도움이되기 때문에 ...하지만 때로는 약간의 고통이 될 수 있습니다).

    예, 원시 문자열은 그런 식으로 동작하도록 설계되었습니다 (백 슬래시가 홀수로 나오는 것을 금지합니다). 그리고 Guido가 그가 발명했을 때 만든 디자인 결정을 존중하는 것이 "적절한 동작"이라고 완벽하게 간주됩니다.

  3. ==============================

    3.이 문제를 해결하는 다른 방법은 다음과 같습니다.

    이 문제를 해결하는 다른 방법은 다음과 같습니다.

     >>> print r"Raw \with\ trailing backslash\\"[:-1]
     Raw \with\ trailing backslash\
    
  4. ==============================

    4.그렇다면 왜 원시 문자열이 '포함 된 따옴표를 제외하고는 원시가 아닌지'에 대한 질문이 제기 될 것입니다.

    그렇다면 왜 원시 문자열이 '포함 된 따옴표를 제외하고는 원시가 아닌지'에 대한 질문이 제기 될 것입니다.

    약간의 이스케이프 메커니즘을 가져야합니다. 그렇지 않으면 문자열 내에서 외부 인용 문자를 사용할 수 없습니다. 그리고 나서 탈출 메커니즘을위한 탈출 메커니즘이 필요합니다.

  5. from https://stackoverflow.com/questions/2870730/python-raw-strings-and-trailing-backslash by cc-by-sa and MIT license