正则表达式中的"r"含义
python正则表达式中"r"元字符的含义
不使用r时需要经过python解释器的转化,直接经过正则的转化。
使用r时需要先经过python解释器的转化,再经过正则的转化。
解释:
代码1:
import re
a = '0034\\n22222'
result = re.search('\\\\n', a)
if result:
print(a)
else:
print("no")
print(result)
运行结果:
0034\n22222
<re.Match object; span=(4, 6), match='\\n'>
解释:
a字符串经过python解释器的解释,"\\n"被转化为内存中的"\n"。"\"占用一个字节,"n"占用一个字节。
"\\\\n"先经过python解释器的解释,"\\\\n"被转化为内存中的"\\n",然后又经过正则的转化,因为"\"在正则中是转义字符,"\\n"被转化为"\n"。"\"占用一个字节,"n"占用一个字节。
代码2:
import re
a = "0034\\n22222"
result = re.search(r"\\n", a)
if result:
print(a)
else:
print("no")
print(result)
运行结果:
0034\n22222
<re.Match object; span=(4, 6), match='\\n'>
解释:
a字符串经过python解释器的解释,"\\n"被转化为内存中的"\n"。"\"占用一个字节,"n"占用一个字节。
r"\\n"不用经过python解释器的解释,直接经过正则的转化,因为"\"在正则中是转义字符,"\\n"被转化为"\n"。"\"占用一个字节,"n"占用一个字节。
代码3:
import re
a = "0034\n22222"
result = re.search(r"\n", a)
if result:
print(a)
else:
print("no")
print(result)
运行结果:
0034
22222
<re.Match object; span=(4, 5), match='\n'>
解释:
a字符串经过python解释器的解释,"\n"被转化为内存中的一个字节。
r"\n"不用经过python解释器的解释,直接经过正则的转化,因为"\"在正则中是转义字符,"\n"被转化为内存中的一个字节。
代码4:
import re
a = "0034\n22222"
result = re.search("\n", a)
if result:
print(a)
else:
print("no")
print(result)
运行结果:
0034
22222
<re.Match object; span=(4, 5), match='\n'>
解释:
a字符串经过python解释器的解释,"\n"被转化为内存中的一个字节。
"\n"经过python解释器的解释转化为内存中的一个字节,然后经过正则的转化,因为是一个字节,不是转义字符,所以保持不变。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。