Python正则表达式中的'r'用法总结

作者:INEVGVUP 时间:2021-08-22 23:16:34 

Python正则表达式中的'r'

最近遇到一个非常困惑的地方,那就是在使用Python中的正则表达式的时候,正则表达式前面的’r’带来的影响。自己最开始的困惑点在于,’r‘的作用是声明为原始字符串,那么按照此种逻辑,‘\n’匹配的就是换行符,而r’\n’匹配的不就是原始的’\‘和’n’两个字符嘛。但是可以发现r’\n’也可以匹配换行符,这就让笔者感到非常疑惑。经过分析参考,自己得出了一套解释,不一定正确,大家可以作为一定的参考。

import re
data = "Give a thumb up!\nThank you!"
print(data)
print(re.findall('\n', data))
print(re.findall(r'\n', data))

发现输出如下所示,可以发现r’\n’依然能够匹配换行符

Python正则表达式中的'r'用法总结

一、Python字符串前面加'r'

对于Python字符串,前面加’r’的解释较为简单,就是决定一个字符串是否为原生字符串,具体示例如下所示

data1 = "Give a thumb up!\nThank you!"
print(data1)
data2 = r"Give a thumb up!\nThank you!"
print(data2)

输入如下所示

Python正则表达式中的'r'用法总结

二、正则表达式匹配原理

下面给出自己对于正则匹配过程的理解,这部分完全为个人理解,本质上是为了解释文章开始提出的那个奇怪的问题。当我们在程序中定义了一个正则表达式,首先会对给出的字面的正则表达式做一个转换,例如如果定义一个正则表达式为’\\\\‘,那么这个字面的’\\\\‘会进行转义,那么正则表达式里面的值就是’\\‘。此时,正则表达式的值为’\\‘,那么进行匹配时,’\\‘匹配的就是’\‘,第一个’\‘代表转义,所以此时进行匹配,就能够匹配原始字符串中的’\'。程序运行如下

data = "Give\Thank you!"
print(data)
tmp_str = []
tmp_str.append(data[4])
print(tmp_str)
print(re.findall('\\\\', data))

程序输入如下所示

Python正则表达式中的'r'用法总结

为了更好解释匹配原理,画一张图来解释

Python正则表达式中的'r'用法总结

三、正则表达式前面加'r'

由上述的原理图,那么在正则表达式前面加’r’相当于是原生字符串,会导致正则表达式接受的值就是被赋值的字面值,也就相当于Python解释器不会进行转换了,赋值r’\\‘,那么正则表达式接受的值就是’\\',示例如下所示

data = "Give a thumb up\Thank you!"
print(data)
print(re.findall(r'\\', data))

运行结果如下

Python正则表达式中的'r'用法总结

那接下来看一个例子,来理解’\n’有关的问题

data = "Give a thumb up\nThank you!\nMua"
print(data)
print(re.findall('\n', data))
print(re.findall(r'\n', data))
print(re.findall('\\n', data))
print(re.findall(r'\\n', data))

输出如下

Python正则表达式中的'r'用法总结

第一种情况,字面为’\n’,那么正则表达式实际接受的值为换行符,换行符直接就可以匹配字符串中的换行符

第二种情况,正则表达式实际接受的值为’\n’,‘\n’在匹配的时候代表换行符,能够匹配出字符串中的换行符

第三种情况,字面值为’\\n’,Pyhton解释器经过解释,对’\\‘进行转义,正则表达式实际接收的值为’\n’,在匹配时能够匹配换行符

第四种情况,为原生字符串,正则表达式实际接收的值为’\\n’,‘\\n’在进行匹配时对’\\‘进行转义,所以匹配的是’\'和’n’两个字符,验证此种情况如下

data = r"Give a thumb up\nThank you!\nMua"
print(data)
print(re.findall('\n', data))
print(re.findall(r'\n', data))
print(re.findall('\\n', data))
print(re.findall(r'\\n', data))

Python正则表达式中的'r'用法总结

来源:https://blog.csdn.net/explorer5568/article/details/127806215

标签:python,正则表达式,r
0
投稿

猜你喜欢

  • Flask框架之数据交互的实现

    2023-01-25 05:41:10
  • 如何利用pyinstaller打包Python程序为exe可执行文件

    2023-11-08 08:01:39
  • PHP中trait的使用和同时引入多个trait时同名方法冲突的处理方法

    2023-06-16 23:13:52
  • 全局于网站整体的网页设计

    2009-03-27 17:15:00
  • 安装多个版本的TensorFlow的方法步骤

    2022-12-10 00:13:02
  • python使用socket向客户端发送数据的方法

    2023-08-13 00:16:51
  • Python脚本提取fasta文件单序列信息实现

    2023-03-06 12:55:02
  • TensorFlow实现卷积神经网络

    2022-05-21 02:17:02
  • python实现堆和索引堆的代码示例

    2021-09-21 21:42:05
  • PHP的mysqli_stmt_init()函数讲解

    2023-06-08 05:04:51
  • 常用java正则表达式的工具类

    2023-06-14 09:16:46
  • IIS上设置301跳转,实现ASP带参数跳转

    2011-04-08 12:52:00
  • PHP header()函数使用详细(301、404等错误设置)

    2023-11-02 17:28:23
  • ML神器:sklearn的快速使用及入门

    2023-04-17 04:42:09
  • asp函数转换xml中的实体字符[转义符]

    2008-10-16 17:07:00
  • 在Python 的线程中运行协程的方法

    2021-03-10 18:06:38
  • Python matplotlib绘制散点图配置(万能模板案例)

    2023-08-02 23:04:18
  • Matlab中plot基本用法的具体使用

    2022-08-14 10:28:24
  • 使用python调用浏览器并打开一个网址的例子

    2023-04-20 00:34:23
  • 一文让你秒懂精通pip并快速体验深度学习应用【建议收藏】

    2022-07-08 22:27:56
  • asp之家 网络编程 m.aspxhome.com