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 多线程应用介绍
Dec 19 Python
Python的迭代器和生成器使用实例
Jan 14 Python
python+mongodb数据抓取详细介绍
Oct 25 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
Jun 01 Python
Python3中lambda表达式与函数式编程讲解
Jan 14 Python
在Pycharm中调试Django项目程序的操作方法
Jul 17 Python
python字典排序的方法
Oct 12 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
Python ADF 单位根检验 如何查看结果的实现
Jun 03 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
php仿QQ验证码的实例分析
2013/07/01 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
分享3个php获取日历的函数
2015/09/25 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
Bootstrap每天必学之警告框插件
2016/04/26 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
Python输出9*9乘法表的方法
2015/05/25 Python
python opencv之SURF算法示例
2018/02/24 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
django中related_name的用法说明
2020/05/20 Python
Python 解决相对路径问题:"No such file or directory"
2020/06/05 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
会计职业生涯规划范文
2014/01/04 职场文书
服务员岗位责任制
2014/02/11 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
Python字典的基础操作
2021/11/01 Python
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS