python 中的反斜杠匹配的问题
关于反斜杠的匹配问题可以参考:
https://www.cnblogs.com/mzc1997/p/7689235.html
文章中提出了两个概念: 字符串转义和正则转义,我觉得是理解反斜杠的关键所在
1. 字符串转义
在一个字符串中 因为有\n\t 等特殊含义的字符存在,所以字符“\” 是转义字符(字符串转义),如果要取消其转义属性有两种方式:
1)再加一个转义字符:'\\'
2)使用原始字符串:r'\'
2. 正则转义
正则表达式中,因为有\d,\s 等表示特殊意义的字符存在,所以正则表达式中的“\” 也表示转义(正则转义),如果要取消其转义属性只有一种方式:
用两个'\'
其实Perl 正则表达式中匹配'\' 的确是用的‘\\’.
那么匹配'\' 的正则表达就很好理解了,因为正则表达式同时也是字符串,所以既要有字符转义,又要有正则表达式转义, 那就有两种方式:
'\\\\' 和
r'\\'
将字符串中的\\ 替换为\
a=r'3\\8\\9' print(a) 3\\8\\9 c=re.sub(r'\\\\','\\\\',a) c
Out[213]: '3\\8\\9' print (c)
3\8\9
举例:
再举一个反斜杠的例子,这是在用bs 抓取网页后得到字符串d 再将其转换成字典
d=soup.find('div',{'class':'page-box house-lst-page-box'}).get('page-data')
print("original is ",d," type is ",type(d))
print("asic code is ",d.encode('ascii'))
d=d.encode('ascii').decode('unicode-escape')
print("before is ",d," type is ",type(d))
d=re.sub(r"'",'',d)
print("after sub is ", d," type is ",type(d))
exec(d)
print("after exec is ", d," type is ",type(d))
a=eval(d)
print("after eval is ", a," type is ",type(a))
得到的结果如下:
原始得到的字符串中包含了'\', 这个反斜杠是为了转义', 将其转换为ascii code 发现的确原始字符串用了双斜杠,并且在‘ 前也用了斜杠表示转义。
通过d.encode(''asii').decode('unicode-escape') 可以将原始字符串中的斜杠去掉。
但是字符串中还包含了单引号,用sub 将其去掉。
执行eval 后被转换成字典格式。
original is \'{"totalPage":2,"curPage":1}\' type is <class 'str'>
asic code is b'\\\'{"totalPage":2,"curPage":1}\\\''
before is '{"totalPage":2,"curPage":1}' type is <class 'str'>
after sub is {"totalPage":2,"curPage":1} type is <class 'str'>
after exec is {"totalPage":2,"curPage":1} type is <class 'str'>
after eval is {'totalPage': 2, 'curPage': 1} type is <class 'dict'>
strip() 和replace()
删除字符串中的换行, replace('\n','')
删除字符串首尾的空格, strip()
python 中的反斜杠匹配的问题的更多相关文章
- python中的反斜杠问题
python本身使用 \ 来转义一些特殊字符,比如在字符串中加入引号的时候 s = 'i\'m superman' print(s) # i'm superman 为了防止和字符串本身的引号冲突,使用 ...
- python raw String 获取字符串变量中的反斜杠
常用的获取raw string的方式为: >>>r'\n' \n 不能用在字符串变量中,获取字符串变量中的反斜杠如下: tab = '\n' >>>tab.enco ...
- String.replaceAll()方法替换字符串中的反斜杠(\)
replaceAll()方法实际是采用正则表达式的规则去匹配的. 在regex中"\\"表示一个"\",在java中一个"\"也要用&quo ...
- PHP去掉转义后字符串中的反斜杠\函数stripslashes
addslashes函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes则是去掉转义后字符串中的反斜杠\,比如当你提交一段 json数据到PHP端的时候可能会遇到json字符串中 ...
- (转载)PHP去掉转义后字符串中的反斜杠\函数stripslashes
(转载)http://www.beijibear.com/index.php?aid=182 addslashes()函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes()则是 ...
- 黄聪:PHP去掉转义后字符串中的反斜杠\函数stripslashes
addslashes函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes则是去掉转义后字符串中的反斜杠\,比如当你提交一段json数据到PHP端的时候可能会遇到json字符串中有 ...
- 使用java中replaceAll方法替换字符串中的反斜杠
今天在项目中使用java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常: java.util.regex.Pa ...
- 宏定义中的反斜杠"\"和宏定义的细节说明
转载自:http://www.wtoutiao.com/p/K6csca.html 在阅读C语言代码经常可以看到代码中出现反斜杠"\",不是很明白它的意思,遂对反斜杠"\ ...
- java中replaceAll反斜杠\ or java中replaceAll 括号[
java中replaceAll反斜杠\ String s=new String("this is a \\"); s.replaceAll("\\",&qu ...
随机推荐
- 洛谷P1638 逛画展 题解 尺取法/双指针/队列
题目链接:https://www.luogu.com.cn/problem/P1638 题目大意: 给你一个长度为 \(n (\le 10^6)\) 的数组,数组中每个元素的范围在 \(1\) 至 \ ...
- 「CH2201」小猫爬山 解题报告
CH2201 小猫爬山 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 描述 ...
- (一)Django项目架构介绍
项目的架构为: 1.虚拟环境virtualenv 安装Django==2.1.3 安装pymysql 安装mysqlclient 安装其他等 2.项目结构为: 应用APP: blog -- 管理博客 ...
- JUC 中的 Atomic 原子类总结
1 Atomic 原子类介绍 Atomic 翻译成中文是原子的意思.在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的.在我们这里 Atomic 是指一个操作是不可中断的.即使是 ...
- 类加载器在Tomcat中的应用
之前有文章已经介绍过了JVM中的类加载机制,JVM中通过类加载加载class文件,通过双亲委派模型完成分层加载.实际上类加载机制并不仅仅是在JVM中得以运用,通过影响字节码生成和类加载器目前已经有了许 ...
- react super中的props
有的小伙伴每次写组件都会习惯性在constructor和super中写上props,那么这个是必要的吗?? 首先要明确很重要的一点就是: 可以不写constructor,一旦写了constructor ...
- Netty快速入门(05)Java NIO 介绍-Selector
Java NIO Selector Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读.可写.如此可以实现单线程管理多个channels,也就是 ...
- linux文件通配符
* #匹配任意字符 ? #匹配任意单个字符 ~ #当前用户家目录 ~user #用户user的家目录 ~+ #当前工作目录 ~- #前一个工作目录 [0-9] #匹配的数字范围 [a-z] #匹配小写 ...
- 幽灵java进程引起的: FATAL ERROR in native method
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT( ...
- 自定义博客cnblogs样式的必备前端小知识——js、jq
JQ.JS相关小知识 任意元素自动点击 $(".editicon").trigger('click') 添加子元素 append() - 在被选元素的结尾插入内容 prepend( ...