'...'
, "..."
Em Python, se prefixar estas cordas literalmente com um dos seguintes caracteres, o valor tornar-se-á uma corda sem expandir a sequência de fuga.
r
R
Útil quando se lida com cordas que utilizam muitas barras invertidas, tais como caminhos do Windows e padrões de expressão regulares.
A seguinte informação é fornecida aqui.
- sequência de fuga
- Ignorar (desactivar) as sequências de fuga em cordas em bruto
- Converter corda normal em corda crua:
repr()
- Note a contrabarra no final.
sequência de fuga
Em Python, os caracteres que não podem ser representados numa cadeia normal (tais como separadores e novas linhas) são descritos utilizando sequências de fuga com barras invertidas, semelhantes à linguagem C. Um exemplo de uma sequência de fuga é mostrado abaixo.
\t
\n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B
Ignorar (desactivar) as sequências de fuga em cordas em bruto
'...'
, "..."
Se prefixar tal corda literalmente com um dos seguintes, o valor tornar-se-á uma corda sem expandir a sequência de fuga. Tal cadeia é chamada de cadeia em bruto.
r
R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB
Não há nenhum tipo especial chamado tipo de corda bruta, é apenas um tipo de corda e é igual a uma corda normal com uma barra invertida representada da seguinte forma\\
print(type(rs))
# <class 'str'>
print(rs == 'a\\tb\\nA\\tB')
# True
Numa cadeia normal, uma sequência de fuga é considerada como um caracter, mas numa cadeia em bruto, as contrabarras são também contadas como caracteres. O comprimento da corda e de cada caracter é o seguinte.
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']
Caminho das Janelas
A utilização da cadeia em bruto é útil quando se pretende representar um caminho do Windows como uma cadeia.
Os caminhos das janelas são separados por barras invertidas, por isso se usar uma corda normal, tem de escapar ao caminho como se segue, mas se usar uma corda em bruto, pode escrevê-lo como está. Os valores são equivalentes.\\
path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True
Note-se que um fio que termine com um número ímpar de contrabarras resultará num erro, como descrito abaixo. Neste caso, é necessário escrever a corda como uma corda normal, ou concatená-la, escrevendo apenas o final da corda como uma corda normal.
path2 = 'C:\\Windows\\system32\\'
# rpath2 = r'C:\Windows\system32\'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:\Windows\system32' + '\\'
print(path2 == rpath2)
# True
Converter cordas normais em cordas cruas com repr()
Se quiser converter uma string normal numa string em bruto ignorando (desactivando) sequências de fuga, pode usar a função repr() integrada.
s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'
O que repr() retorna é uma string representando um objecto tal que tem o mesmo valor de quando foi passado para eval(), com caracteres de liderança e de seguimento.
print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]
Utilizando fatias, podemos obter um fio equivalente ao fio em bruto com r anexado.
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
Note a contrabarra no final.
Uma vez que uma contrabarra escapa ao carácter de citação imediatamente a seguir, ocorrerá um erro se houver um número ímpar de contrabarras no fim da corda. Um número par de contrabarragens é OK.
# print(r'\')
# SyntaxError: EOL while scanning string literal
print(r'\\')
# \\
# print(r'\\\')
# SyntaxError: EOL while scanning string literal