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 ...
随机推荐
- 【Python3爬虫】反反爬之解决前端反调试问题
一.前言 在我们爬取某些网站的时候,会想要打开 DevTools 查看元素或者抓包分析,但按下 F12 的时候,却出现了下面这一幕: 此时网页暂停加载,也就没法运行代码了,直接中断掉了,难道这就能阻止 ...
- 用本地自定义域名访问远程服务器,并支持websocket和cookie
场景 在公司会有很多测试的机器,或者一些OA服务,Confluence,Jenkins,各种中间件的后台等等,都使用HTTP访问,且由于是内网机器没有域名,输入IP又要输入不同端口,访问起来比较麻烦. ...
- 微信生成二维码 PHP
<?php /** * Created by PhpStorm. * User: liyiming * Date: 2019/8/8 * Time: 14:23 */ # 生成二维码 class ...
- 详解Spring IoC容器
一.Spring IoC容器概述 1.依赖反转(依赖注入):依赖对象的获得被反转了. 如果合作对象的引用或依赖关系的管理由具体对象来完成,会导致代码的高度耦合和可测试性的降低,这对复杂的面向对象系统的 ...
- less实现if else
less没有我们平常使用的if,else条件判断,而是用when来实现这种用法 1.比如我们要设置宽度 宽度可以百分比,也可以是像素,当是百分比时做对应处理,当是px时做另一种处理,这时候就需要用wh ...
- 流程控制-物流费用计算(嵌套if)
题目描述 快递公司规定,如果物品体积超过2.5立方米,不允许快递.如果重量超过40kg,不允许快递.快递收费价格为: 小于等于1kg,一口价10块钱: 大于1kg,小于等于5kg,10块钱的基础上,每 ...
- 一条SQL注入引出的惊天大案2:无限战争
前情回顾: 经过黑衣人和老周的合作,终于清除了入侵Linux帝国的网页病毒,并修复了漏洞.不曾想激怒了幕后的黑手,一场新的风雨即将来临. 详情参见:一条SQL注入引出的惊天大案 风云再起 小Q是L ...
- Go 每日一库之 flag
缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态.写博客是一种方式,但不是每天都有想写的,值得写的东西. 有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏 ...
- Java 数据结构快速入门
数据结构:栈 简介 栈(stack),又称堆栈,它是运算受限的线性表. 限制 栈(stack)的限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加.查找.删除等操作. 采用该结构的 ...
- cogs 647. [Youdao2010] 有道搜索框 Trie树 字典树
647. [Youdao2010] 有道搜索框 ★☆ 输入文件:youdao.in 输出文件:youdao.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 在有 ...