2010-04-24 125 views
22

我正在试验'\'字符,使用'\ a \ b \ c ...'只是为了枚举Python自己将哪些字符解释为控制字符以及什么。这里是我的发现:为什么' x'在Python中无效?

\a - BELL 
\b - BACKSPACE 
\f - FORMFEED 
\n - LINEFEED 
\r - RETURN 
\t - TAB 
\v - VERTICAL TAB 

大多数我试过其他字符,“\ G”,“\ S”等只计算为一个反斜杠的2个字符的字符串和给定的字符。我明白这是故意的,对我有意义。

但'\ x'是一个问题。当我的脚本达到此源代码行:

val = "\x" 

我得到:

ValueError: invalid \x escape 

什么特别之处 '\ X'?为什么与其他非转义角色的处理方式不同?

回答

20

没有列出所有的转义码以及它们在documentation意义的一个表格。

 
Escape Sequence Meaning      Notes 
\xhh    Character with hex value hh (4,5) 

注:

4.不像在标准C,需要正好两个十六进制数字。
5.在字符串文字中,十六进制和八进制转义字符表示具有给定值的字节 ;该字节不需要在源字符集中编码字符 。在Unicode文字中,这些转义字符表示具有给定值的Unicode字符 。

+0

Ooof!当然,谢谢! – PaulMcG 2010-04-24 14:13:30

4

\ X丢失要匹配对十六进制字符:\ XNN - > \ X1B

5

x用于在字符串定义(一个字节)的十六进制文字,例如:

'\x61' 

将评估为“A”,因为61是97的十六进制值,它代表一个在ASCII

1

你不给完整的转义序列:

\ XHH ...

的十六进制值HH,磨片re hh代表 十六进制数字('0' - '9',以及'A' - 'F'或'a' - 'f')的序列。与ISO C中的 相同结构一样,转义序列一直继续,直到看到第一个非十六进制数字 。 (c.e.)但是,使用两个以上的 十六进制数字会产生未定义的结果。 (在“\ X”逃跑 序列没有在POSIX awk中允许的。)

来源:http://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences.html