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解释器的解释转化为内存中的一个字节,然后经过正则的转化,因为是一个字节,不是转义字符,所以保持不变。