关于反斜杠的匹配问题可以参考:

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 中的反斜杠匹配的问题的更多相关文章

  1. python中的反斜杠问题

    python本身使用 \ 来转义一些特殊字符,比如在字符串中加入引号的时候 s = 'i\'m superman' print(s) # i'm superman 为了防止和字符串本身的引号冲突,使用 ...

  2. python raw String 获取字符串变量中的反斜杠

    常用的获取raw string的方式为: >>>r'\n' \n 不能用在字符串变量中,获取字符串变量中的反斜杠如下: tab = '\n' >>>tab.enco ...

  3. String.replaceAll()方法替换字符串中的反斜杠(\)

    replaceAll()方法实际是采用正则表达式的规则去匹配的. 在regex中"\\"表示一个"\",在java中一个"\"也要用&quo ...

  4. PHP去掉转义后字符串中的反斜杠\函数stripslashes

    addslashes函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes则是去掉转义后字符串中的反斜杠\,比如当你提交一段 json数据到PHP端的时候可能会遇到json字符串中 ...

  5. (转载)PHP去掉转义后字符串中的反斜杠\函数stripslashes

    (转载)http://www.beijibear.com/index.php?aid=182 addslashes()函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes()则是 ...

  6. 黄聪:PHP去掉转义后字符串中的反斜杠\函数stripslashes

    addslashes函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes则是去掉转义后字符串中的反斜杠\,比如当你提交一段json数据到PHP端的时候可能会遇到json字符串中有 ...

  7. 使用java中replaceAll方法替换字符串中的反斜杠

    今天在项目中使用java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常: java.util.regex.Pa ...

  8. 宏定义中的反斜杠"\"和宏定义的细节说明

    转载自:http://www.wtoutiao.com/p/K6csca.html 在阅读C语言代码经常可以看到代码中出现反斜杠"\",不是很明白它的意思,遂对反斜杠"\ ...

  9. java中replaceAll反斜杠\ or java中replaceAll 括号[

    java中replaceAll反斜杠\   String s=new String("this is a \\"); s.replaceAll("\\",&qu ...

随机推荐

  1. Java网络编程系列之TCP连接状态

    1.TCP连接状态 LISTEN:Server端打开一个socket进行监听,状态置为LISTEN SYN_SENT:Client端发送SYN请求给Server端,状态由CLOSED变为SYN_SEN ...

  2. docker命令总结(二)

    上次只是给大家把命令的作用以及简单使用列出来了(大家可以查看:docker命令总结(一)),那这篇文章会详细介绍每条命令的参数,命令比较多建议大家使用搜索,进行查看 search docker sea ...

  3. Go Web 编程之 请求

    概述 前面我们学习了处理器和处理器函数,如何编写和注册处理器.本文我们将学习如何从请求中获取信息. 请求的结构 通过前面的学习,我们知道处理器函数需要符合下面的签名: func (w http.Res ...

  4. 深入理解vue的watch

    深入理解vue的watch vue中的wactch可以监听到data的变化,执行定义的回调,在某些场景是很有用的,本文将深入源码揭开watch额面纱 前言 watch的使用 watch的多种使用方式 ...

  5. 打造m3u8视频(流视频)下载解密合并器(kotlin)

    本文是对我原创工具m3u8视频下载合并器关键代码解析及软件实现的思路的讲解,想要工具的请跳转链接 1.思路说明 思路挺简单,具体步骤如下: 下载m3u8文件 解析m3u8文件获得ts文件列表 根据文件 ...

  6. A complex 16-Level XSS Challenge

    A complex 16-Level XSS Challenge, held in summer 2014 (+1 Hidden Level) Index Level 0 Level 1 Level ...

  7. 分布式缓存Redis的持久化方式RDB和AOF

    一.前言 Redis支持两种方式的持久化,RDB和AOF.RDB会根据指定的规则“定时”将内存中的数据存储到硬盘上,AOF会在每次执行命令后将命令本身记录下来.两种持久化方式可以单独使用其中一种,但更 ...

  8. .net core 常见设计模式-IChangeToken

    场景 一个对象A,希望它的某些状态在发生改变时通知到B(或C.D),常见的做法是在A中定义一个事件(或直接用委托),当状态改变时A去触发这个事件.而B直接订阅这个事件 这种设计有点问题B由于要订阅A的 ...

  9. HTML超全笔记

    HTML概述 概念:是最基础的网页开发语言 Hyper Text Markup Language 超文本标记语言 超文本: 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本. 标记 ...

  10. Kivy Event 在哪里?

    kivy 程序都是都需要继承APP基类 而App类在Lib\site-packages\kivy\app.py文件定义 from kivy.event import EventDispatcher c ...