Python中关于原生字符串的问题,来个大佬救救我
想对 unicode 编码做字符串的操作,要把 a 转成原生字符串 b,百度不到呀,又不会科学上网,大佬们帮帮我
a = '\uf85c\ue24c.\uf8e9'
b = func(a) 我就想找到这样一个方法把 a 转成 b,C 是目标结果
b = r'\uf85c\ue24c.\uf8e9'
c = re.sub(r'\..', '', b)
Python中关于原生字符串的问题,来个大佬救救我
4 回复
a 是爬虫爬下的一串字符
原生字符串(raw string)在Python里就是给字符串字面量前面加个r或者R前缀。它的核心作用就一点:让字符串里的反斜杠\失去转义功能,变成一个普通的字符。
这玩意儿在处理Windows文件路径或者正则表达式的时候特别有用,能省不少事儿。
举个例子你就明白了:
# 普通字符串:\t 被解释成制表符
normal_path = "C:\Users\name\Documents\file.txt"
print(normal_path) # 输出会乱,因为 \U, \n, \f 都被转义了
# 原生字符串:每个字符都按字面意思来
raw_path = r"C:\Users\name\Documents\file.txt"
print(raw_path) # 正确输出:C:\Users\name\Documents\file.txt
# 正则表达式里更明显
import re
# 普通字符串写反斜杠得用两个 \\
pattern1 = "\\d+\\.\\d+" # 匹配数字如 123.456
# 原生字符串就清爽多了
pattern2 = r"\d+\.\d+" # 和上面完全等价
text = "价格是 123.45 元"
match1 = re.search(pattern1, text)
match2 = re.search(pattern2, text)
print(match1.group()) # 123.45
print(match2.group()) # 123.45
关键点:
- 原生字符串只在源代码的字符串字面量里有效,字符串对象在内存里存储的时候,反斜杠还是那个反斜杠。
- 它不能以奇数个反斜杠结尾,比如
r"\"会报错,因为最后一个引号被转义了。要表示单个反斜杠,可以用r"\ "(末尾加空格)或者"\\"。
一句话建议:处理路径或正则时,无脑用原生字符串就对了。
b = a.encode(‘unicode_escape’).decode()
感谢大佬(づ ̄ 3  ̄)づ

