python中的反斜杠问题深入讲解


Posted in Python onAugust 12, 2019

前言

python本身使用 \ 来转义一些特殊字符,比如在字符串中加入引号的时候

s = 'i\'m superman'
print(s) # i'm superman

为了防止和字符串本身的引号冲突,使用 \ 来转义,一般情况下这个也不会引起什么问题,但是当你要使用 \ 来转义 \ 的时候,就比较混乱了,比如我们想要输出一个 \ ,得写两个 \ ,否则会报语法错误,因为 \ 把后面的引号给转义了,必须使用 \

# 错误写法
# print '\'

# 正确写法
print('\\')  # \

# 原生字符串
print(r'\\') # \\

将 \ 转义一下使其不具备转义功能,才可以正确输出,当使用原生字符串的时候,输出显示了两个 \ ,看起来好像是写几个输出几个的样子,如果这样想的话,你可以试一下,看能不能输出奇数个 \。

补充——————————————————

python的原生字符串不能以反斜杠结尾的问题

Python的原生字符串(raw string)是个很有用的东西,可以少写很多反斜线(转义符号)。

不过它有个著名的bug,就是不能以反斜线结尾,这让人很无语。今天突然发现General Python FAQ里有进行说明,并给出了解决办法。

首先要澄清的是不是不能以反斜线结尾,而是不能以奇数个反斜线结尾。

其次,这个bug的原因是一些处理器(例如主要的正则表达式引擎)希望进行它们自己的反斜线转义处理,而这些处理器不允许字符串以未匹配的反斜线结尾。

最后,解决办法就是把反斜线放在另一个字符串里,Python会自动进行合并:

dir = r"\this\is\my\dos\dir" "\\"

补充结束——————————————————

虽然原生字符串不是很完美,但是它已经可以帮我们解决很大一部分的问题了。比如当你想匹配"\"的时候,原生字符串可以让你至少少写一半的\,即节省代码量,又增加了可读性。

import re
_string = '\\\\'
print(_string) # \\

# 字符串
for i in re.findall('\\\\', _string):
  print(i)  
  # \
  # \

# 原生字符串
for i in re.findall(r'\\', _string):
  print(i)  
  # \
  # \

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python 快速排序代码
Nov 23 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
python实现图片批量压缩程序
Jul 23 Python
python将txt文件读取为字典的示例
Dec 22 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
Django ModelForm组件使用方法详解
Jul 23 Python
用sqlalchemy构建Django连接池的实例
Aug 29 Python
Pytorch转onnx、torchscript方式
May 25 Python
分位数回归模型quantile regeression应用详解及示例教程
Nov 02 Python
Django CBV与FBV原理及实例详解
Aug 12 #Python
Python利用requests模块下载图片实例代码
Aug 12 #Python
django+tornado实现实时查看远程日志的方法
Aug 12 #Python
Django结合ajax进行页面实时更新的例子
Aug 12 #Python
django fernet fields字段加密实践详解
Aug 12 #Python
利用pyecharts实现地图可视化的例子
Aug 12 #Python
django echarts饼图数据动态加载的实例
Aug 12 #Python
You might like
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
php生成与读取excel文件
2016/10/14 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
python中反射用法实例
2015/03/27 Python
python实现在windows下操作word的方法
2015/04/28 Python
Python制作爬虫采集小说
2015/10/25 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
Python OpenCV获取视频的方法
2018/02/28 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
python 发送get请求接口详解
2020/11/17 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
四年大学自我鉴定
2014/02/17 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
自我管理的活动方案
2014/08/25 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
创业计划书之物流运送
2019/09/17 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js