解决Python正则表达式匹配反斜杠''\\''问题

作者:agentfitz 时间:2022-06-19 09:10:55 

在学习Python正则式的过程中,有一个问题一直困扰我,如何去匹配一个反斜杠(即“\”)?

一、引入

在学习了Python特殊字符和原始字符串之后,我觉得答案应该是这样的:

1)普通字符串:'\\'
2)原始字符串:r'\'
但事实上在提取诸如“3\8”反斜杠之前的数字时,我屡次碰壁,始终得不到结果。最终发现自己理解错了,原来原始字符串和“正则转义”没有一点关系;下面详细谈一谈。

二、字符串转义

反斜杠,在Python中比较特殊,就是它可以用来构成一些特殊字符,比如“\n”表示换行,“\t”表示制表符。下面是使用“\n”的一行代码:

>>>print ('Hello\World\nPython' )

结果为:

“Hello\World
Python“

可以看到其中的“\n”已转义为换行符,而“\W”没有发生转义,原因是“\W”在“字符串转义”中并不对应着特殊字符,没有特殊含义。

如果现在要求变了,要求不对“\n”转义为换行,而是原封不动输出为“Hello\World\nPython”,该怎么办呢?

1)可以这样写“Hello\World\\nPython”,这样输出的时候,“字符串转义”会把“\\”转义为“\”;
2)也可使用另一种方法:原始字符串;原始字符串(即r'...'):字符串中所有字符都直接按照字面意思来使用,不转义特殊字符。

下面是使用原始字符串的代码:

print r'Hello\World\nPython'

结果为:

“Hello\World\nPython”

可以清楚看到,在使用原始字符串之后,“\n”未被转义为换行符,而是直接被输出了。

三、正则转义

好了,上面讲的只是“字符串转义”。同理,在正则表达式中也存在转义,我们姑且先称其为“正则转义”,其与“字符串转义”完全不同,比如“\d”代表数字,“\s”代表空白符。下面我们先编写开头的例子,然后再分析。
提取“3\8”反斜杠之前的数字:


import re
string = '3\8'
m = re.search('(\d+)\\\\', string)
if m is not None:
print m.group(1) # 结果为:3
n = re.search(r'(\d+)\\', string)
if n is not None:
print n.group(1) # 结果为:3

正则表达式字符串需要经过两次转义,这两次分别是上面的“字符串转义”和“正则转义”,个人认为“字符串转义”一定先于“正则转义”。

1)'\\\\'的过程:

先进行“字符串转义”,前两个反斜杠和后两个反斜杠分别被转义成了一个反斜杠;即“\\|\\”被转成了“\|\”(“|”为方便看清,请自动忽略)。“字符串转义”后马上进行“正则转义”,“\\”被转义为了“\”,表示该正则式需要匹配一个反斜杠。

2)r'\\'的过程:

由于原始字符串中所有字符直接按照字面意思来使用,不转义特殊字符,故不做“字符串转义”,直接进入第二步“正则转义”,在正则转义中“\\”被转义为了“\”,表示该正则式需要匹配一个反斜杠。

四、结论

也就是说原始字符串(即r'...')与“正则转义”毫无关系,原始字符串仅在“字符串转义”中起作用,使字符串免去一次转义。

总结

以上所述是小编给大家介绍的解决Python正则表达式匹配反斜杠''\''问题,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

来源:https://www.cnblogs.com/mzc1997/p/7689235.html

标签:python,正则表达式,匹配,反斜杠\
0
投稿

猜你喜欢

  • FCKeditor编辑器基本配置优化修改使用方法

    2008-12-31 13:32:00
  • python爬虫开发之urllib模块详细使用方法与实例全解

    2021-02-24 04:52:42
  • 也谈谈DIV+CSS的牛角尖

    2007-11-16 16:12:00
  • Python删除指定目录下过期文件的2个脚本分享

    2022-09-11 19:01:10
  • 使用JS+XML(数据岛)实现分页)

    2005-08-18 00:46:06
  • 利用css的clear属性搞定广告文字环绕效果

    2008-05-24 13:48:00
  • python实现的解析crontab配置文件代码

    2021-07-02 18:15:43
  • python 还原梯度下降算法实现一维线性回归

    2023-10-09 21:53:42
  • js经验分享 JavaScript反调试技巧

    2023-07-13 07:53:04
  • Python爬虫突破反爬虫机制知识点总结

    2021-09-17 12:38:22
  • Python工程师面试题 与Python基础语法相关

    2021-07-08 16:20:50
  • asp dictionary对象的用法

    2011-04-14 11:09:00
  • 使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子

    2023-08-26 23:12:32
  • Python实现PDF转MP3的示例代码

    2021-08-07 21:21:06
  • CSS阴影详解

    2009-12-04 18:31:00
  • Opencv实现二维直方图的计算及绘制

    2023-07-18 23:34:52
  • Python数据可视化之Pyecharts使用详解

    2022-10-19 17:31:12
  • 9种使用Chrome Firefox 自带调试工具调试javascript技巧

    2023-07-19 01:03:48
  • python opencv进行图像拼接

    2022-09-10 16:13:01
  • 如何表示python中的相对路径

    2022-09-06 14:13:41
  • asp之家 网络编程 m.aspxhome.com