来源
原始字符串是用来解决正则表达式和ASCII字符之间的冲突而产生的技术。例如正则表达式\b
表示匹配单词边界,而ASCII字符\b
表示退格,如果正则表达式要匹配退格,就要使用双重转义,如\\b
。为了简化过多的转义符,就引入了原始字符串,例如字符串'\\b'
可用r'\b'
来表示。所以原始字符串常用在正则表达式里。
匹配UNICODE字符和回车的正则表达式:
ur'你好!\n'
表示represent
类似于表示UNICODE字符的时候,在字符串前加’u’,表示原始字符串的时候,在字符串前加’r’,这个字符串就是原始字符串了。加r前缀的意思就是防止转义。
普通字符串转原始字符串
s = "Hello \n World!"
# 输出用户易读的格式(显式转换)
print str(a)
# Hello
# World!
# 输出用户易读的格式(隐式转换)
print a
# Hello
# World!
# repr输出原始字符串(Python内部表示的字符串)
print repr(a)
# 'Hello \\n World!'
原始字符串转普通字符串
str = "\u7a7f\u8d8a\u4e9a\u6d32\u6700\u957f\u6700'
#方法1 使用unicode_escape 解码
print str.decode('unicode_escape')
print unicode(str, 'unicode_escape')
#方法2:若为json 格式,使用json.loads 解码
import json
print json.loads('"%s"' %str)
#方法3:使用eval
print eval('u"%s"' % str)
#repr(...)在字符串外增加一对 'deng' -> "'deng'"
# repr(object) -> string
#eval(repr(object)) == object
#方法4:使用python3
str.encode('utf-8').decode("unicode_escape")
参考
- https://docs.python.org/2/library/re.html#raw-string-notation
- https://docs.python.org/2/library/repr.html