...'
,"..."
Python에서 이러한 문자열 리터럴에 다음 문자 중 하나를 접두사로 붙이면 값은 이스케이프 시퀀스를 확장하지 않고 문자열이 됩니다.
r
R
Windows 경로 및 정규식 패턴과 같이 백슬래시를 많이 사용하는 문자열을 처리할 때 유용합니다.
다음 정보가 여기에 제공됩니다.
- 이스케이프 시퀀스
- 원시 문자열의 이스케이프 시퀀스 무시(비활성화)
- 일반 문자열을 원시 문자열로 변환:
repr()
- 끝에 백슬래시를 유의하십시오.
이스케이프 시퀀스
Python에서 일반 문자열로 표현할 수 없는 문자(예: 탭 및 줄 바꿈)는 C 언어와 유사하게 백슬래시가 있는 이스케이프 시퀀스를 사용하여 설명됩니다. 다음은 이스케이프 시퀀스의 예입니다.
\t
\n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B
원시 문자열의 이스케이프 시퀀스 무시(비활성화)
...'
,"..."
이러한 문자열 리터럴에 다음 중 하나를 접두사로 붙이면 값은 이스케이프 시퀀스를 확장하지 않고 문자열이 됩니다. 이러한 문자열을 원시 문자열이라고 합니다.
r
R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB
raw string형이라고 하는 특별한 타입은 없고, 그냥 string형으로 백슬래시가 있는 일반 문자열과 동일하며 다음과 같이 표현됩니다.\\
print(type(rs))
# <class 'str'>
print(rs == 'a\\tb\\nA\\tB')
# True
일반 문자열에서 이스케이프 시퀀스는 하나의 문자로 간주되지만 원시 문자열에서는 백슬래시도 문자로 계산됩니다. 문자열의 길이와 각 문자는 다음과 같습니다.
print(len(s))
# 7
print(list(s))
# ['a', '\t', 'b', '\n', 'A', '\t', 'B']
print(len(rs))
# 10
print(list(rs))
# ['a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B']
윈도우 경로
원시 문자열을 사용하면 Windows 경로를 문자열로 나타내려는 경우에 유용합니다.
Windows 경로는 백슬래시로 구분되므로 일반 문자열을 사용하는 경우 다음과 같이 경로를 이스케이프해야 하지만 원시 문자열을 사용하는 경우 그대로 쓸 수 있습니다. 값은 동일합니다.\\
path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True
백슬래시 수가 홀수로 끝나는 문자열은 아래에 설명된 대로 오류가 발생합니다. 이 경우 문자열을 일반 문자열로 작성하거나 문자열의 끝 부분만 일반 문자열로 작성하여 연결해야 합니다.
path2 = 'C:\\Windows\\system32\\'
# rpath2 = r'C:\Windows\system32\'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:\Windows\system32' + '\\'
print(path2 == rpath2)
# True
repr()을 사용하여 일반 문자열을 원시 문자열로 변환
이스케이프 시퀀스를 무시(비활성화)하는 일반 문자열을 원시 문자열로 변환하려면 내장 함수 repr()을 사용할 수 있습니다.
s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'
repr()이 반환하는 것은 선행 및 후행 문자를 사용하여 eval()에 전달되었을 때와 동일한 값을 갖도록 객체를 나타내는 문자열입니다.
print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]
슬라이스를 사용하여 r이 첨부된 원시 문자열과 동일한 문자열을 얻을 수 있습니다.
s_r2 = repr(s)[1:-1]
print(s_r2)
# a\tb\nA\tB
print(s_r2 == rs)
# True
print(r'\t' == repr('\t')[1:-1])
# True
끝에 백슬래시를 유의하십시오.
백슬래시는 바로 뒤에 오는 인용 문자를 이스케이프하므로 문자열 끝에 백슬래시가 홀수이면 오류가 발생합니다. 짝수의 백슬래시도 괜찮습니다.
# print(r'\')
# SyntaxError: EOL while scanning string literal
print(r'\\')
# \\
# print(r'\\\')
# SyntaxError: EOL while scanning string literal