网络编程
位置:首页>> 网络编程>> Python编程>> python使用正则表达式匹配反斜杠\\遇到的问题

python使用正则表达式匹配反斜杠\\遇到的问题

作者:weixin_42576837  发布时间:2021-12-19 19:45:05 

标签:正则表达式,匹配,反斜杠

遇到的问题:

在做爬虫的时候,爬取的url链接内还有转义字符,反斜杠 \,打算用正则的re.sub()替换掉的时候遇到了问题,这是要做替换的字符串

python使用正则表达式匹配反斜杠\\遇到的问题

最开始直接写

re.sub("\\","",item)

编译器漏红了

python使用正则表达式匹配反斜杠\\遇到的问题

然后就是找解决办法,最后发现要用四个反斜杠才可以,也就是使用

re.sub("\\\\","",item)

查了查资料,简单说说我自己的理解。

正则表达式

首先就是正则表达式,对于正则表达式来说,他的语法是独立的,有自己的语法,在正则表达式中,由于反斜杠 \ 是一个特殊字符,可以和其他字母形成转义字符,所以要想表示一个反斜杠 \ 就必须写成 \\ 这种形式。所以对于正则表达式来说,如果要匹配一个\ 就要写成\\,像这样:

python使用正则表达式匹配反斜杠\\遇到的问题

python字符串

在python中,如果想要输出一个反斜杠\字符,同样要使用转义:

>>> print("\\")
\

同样是因为在python中反斜杠也是一个特殊字符。

综上

当写成

item = "https:\/\/jobs.51job.com/guangzhou-thq\/137115906.html?s=sou_sou_soulb&t=0_0"
   item = re.sub("\\\\","",item)

首先传入的一个参数是一个字符串,所以python中的字符串解析器会把"\\\\"解析成
\\,解析之后会再传递给正则表达式的解析器。由于正则表达式也有自己的语法结构,所以当它看到\\时,会把它解析为一个\,所以这时候正则匹配就会只匹配一个\

贴一个Stackoverflow上的回答:

If you’re putting this in a string within a program, you may actually
need to use four backslashes (because the string parser will remove
two of them when “de-escaping” it for the string, and then the regex
needs two for an escaped regex backslash).
For instance:

regex("\\\\") is interpreted as…

regex("\\" [escaped backslash] followed by "\\" [escaped backslash])
is interpreted as…

regex(\\) is interpreted as a regex that matches a single backslash.

原文地址:Can’t escape the backslash with regex?

当然还可以使用 raw string来写,也就是写成

re.sub(r'\\','',item)

由于使用了r'\\',python的字符串解析器看到r'\\'之后,就直接将外层的r''去掉然后传递给re解析器,re解析器会再次解析\\\,匹配内容是一个反斜杠\

字符串方法replace()

除了使用正则替换之外,还可以使用字符串的replace()

str.replace(old, new[, max])
old – 将被替换的子字符串。
new – 新字符串,用于替换old子字符串。
max – 可选字符串, 替换不超过 max 次

>>> item
'https:\\/\\/jobs.51job.com/guangzhou-thq\\/137115906.html?s=sou_sou_soulb&t=0_0'
>>> item.replace('\\','')
'https://jobs.51job.com/guangzhou-thq/137115906.html?s=sou_sou_soulb&t=0_0'
>>>

需要注意的是不论是正则的re.sub()还是str.replace(),使用之后都不会对原始字符串改变:

import re

urL ='https:\/\/jobs.51job.com\/guangzhou-thq\/137735415.html?s=sou_sou_soulb&t=0_0'
print(urL.replace('\\',''))
print(urL)

print(re.sub(r'\\','',urL))
print(urL)

python使用正则表达式匹配反斜杠\\遇到的问题

总结 

来源:https://blog.csdn.net/weixin_42576837/article/details/124164594

0
投稿

猜你喜欢

  • 打开php.ini,首先找到;;;;;;;;;;;;;;;;; file uploads ;;;;;;;;;;;;;;;;;区域,有影响文件
  • Python下实现定时任务的方式有很多种方式。下面介绍几种循环sleep:这是一种最简单的方式,在循环里放入要执行的任务,然后sleep一段
  • 可以自动轮换的页签 tabs with auto play fucntion<html><head><meta
  • 准确地说, 这个标题是有问题的, go gin只能给浏览器返回操作cookie的指令, 真正执行cookie操作的是浏览器。 但广泛地来讲,
  • 1.场景,对于colums都相同的dataframe做过滤的时候例如:df1 = DataFrame([['a', 10,
  • 从09年初接手淘宝手机网站前端开发的工作至今,转眼已是一年。一步步看着手机淘宝从最初的beta版本到今天的样子,感慨良多。手机网站开发,有着
  • 本人  python新手,使用的环境是python2.7,勿喷# -*- coding:utf8 -*-import random
  • 在计算机信息技术中,少有象类似 XML 那样的技术,她让人们产生范围很大的联想,而这些联想及其应用又可能相距甚远。她也更多引起人们对 XML
  • 本文实例为大家分享了python实现比较文件内容异同的具体代码,供大家参考,具体内容如下import sysimport difflibim
  • 本文实例讲述了Python定时任务sched模块用法。分享给大家供大家参考,具体如下:通过sched模块可以实现通过自定义时间,自定义函数,
  • pycharm2019激活码是专门针对与pycharm2019这一款软件而研发的激活码,能够完美激活软件,并且能够支持2019.1版本,理论
  • 通过这个布局思路来做一个简单的后台管理系统也是OK的,大家可以参考一下啦!话不多说,还是先来梳理一下需要的第三方模块。PyQ5 的UI界面布
  • Python For 循环for 循环用于迭代序列(即列表,元组,字典,集合或字符串)。这与其他编程语言中的 for 关键字不太相似,而是更
  • 我就废话不多说了,大家还是直接看代码吧!def iou(y_true, y_pred, label: int):  "&
  • 经过摸索和实践,我把自己的解决方法,写在下面: 说明: 我的Oracle客户端的版本是 oracle 9i, 安装client端的时候,不能
  • 昨晚着手给个人博客增加网易微博的调用,在Opera下却出现了一个意想不到的问题。内容的展示,一开始是做成横向不间断滚动(现在已经改成纵向定时
  • 有一些问题可能会遇到同元素多列去重问题,下面介绍一种非常简单效率也很快的做法,用pandas来实现。首先我们看一下数据类型:G1 G2a b
  • 在Python中,有些开源项目中的方法返回结果为self. 对于不熟悉这种用法的读者来说,这无疑使人困扰,本文的目的就是给出这种语法的一个解
  • 对win32 COM不是很熟悉,不知道一个程序究竟有多少属性或者方法可以操作。仅仅是一个Sheet页的添加就费了我好长时间,因为这种成功来自
  • 大家都知道,在ASP中可以使用Request.ServerVariables("REMOTE_ADDR")来取得客户端的
手机版 网络编程 asp之家 www.aspxhome.com