python使用正则表达式匹配反斜杠\\遇到的问题
作者:weixin_42576837 发布时间:2021-12-19 19:45:05
遇到的问题:
在做爬虫的时候,爬取的url链接内还有转义字符,反斜杠 \
,打算用正则的re.sub()替换掉的时候遇到了问题,这是要做替换的字符串
最开始直接写
re.sub("\\","",item)
编译器漏红了
然后就是找解决办法,最后发现要用四个反斜杠才可以,也就是使用
re.sub("\\\\","",item)
查了查资料,简单说说我自己的理解。
正则表达式
首先就是正则表达式,对于正则表达式来说,他的语法是独立的,有自己的语法,在正则表达式中,由于反斜杠 \
是一个特殊字符,可以和其他字母形成转义字符,所以要想表示一个反斜杠 \
就必须写成 \\
这种形式。所以对于正则表达式来说,如果要匹配一个\
就要写成\\
,像这样:
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)
总结
来源:https://blog.csdn.net/weixin_42576837/article/details/124164594
猜你喜欢
- 前言正则表达式是对字符串提取的一套规则,我们把这个规则用正则里面的特定语法表达出来,去匹配满足这个规则的字符串。正则表达式具有通用型,不仅p
- 识别快递单号这次跟老师做项目,这项目大概是流水线上识别快递上的快递单号。首先我尝试了解条形码的基本知识 百度百科:条形码 条形码(barco
- 对python3下的requests使用并不是很熟练,今天稍微用了下,请求几次下来后发现出现连接超时的异常,上网查了下,找到了一个还算中肯的
- 0. 学习目标线性表在计算机中的表示可以采用多种方法,采用不同存储方法的线性表也有着不同的名称和特点。线性表有两种基本的存储结构:顺序存储结
- 一、前言别问我为啥题目是英文,因为…高大上(bushi。刷视频的时候偶然刷到了一个关于生日悖论的,当场就觉得不可思议,
- 1、实例 DELIMITER // DROP PROCEDURE IF EXISTS `test`.`p_getvalue` // CREA
- 开发客户端客户是持有TPCoins并从网络上的其他供应商处交换商品/服务的客户,包括他自己的.我们应该为此目的定义 Client&
- 背景:今天同事写代码,用python读取一个四五百兆的文件,然后做一串逻辑上很直观的处理。结果处理了一天还没有出来结果。问题出在哪里呢?解决
- 通过 1至10 阶来拟合对比 均方误差及R评分,可以确定最优的“最大阶数”。import numpy as npimport matplot
- PyCharm 具备一般 IDE 的功能,比如,调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制…另外,PyCha
- 背景:数据库中逗号拼接的字符串,想展示其完整拼接名称或者按其值统计处理,怎么做?FIND_IN_SET函数和GROUP_CONCAT函数你会
- 正常时间显示<SCRIPT language=javascript><!--function Ye
- 本文实例讲述了python根据路径导入模块的方法,分享给大家供大家参考。具体方法如下:常规做法如下:import sys sys.path.
- 什么是树表查询?借助具有特殊性质的树数据结构进行关键字查找。本文所涉及到的特殊结构性质的树包括:二叉排序树。 平衡二叉树。使用上述树结构存储
- 如何让animate在显示图片的过程保持窗口的标题不变animate -title "My Image Sequence"
- 按时间删除文件# importing the required modulesimport osimport shutilimport ti
- 假设访问的views.py如下1.使用url配置默认页from django.conf.urls import urlfrom django
- 一、re是什么?正则表达式是一个特殊的字符序列,能方便的检查一个字符串是否与某种模式匹配。re模块使得python拥有全部的正则表达式功能。
- 1.实现点击按钮,复制文本框中的的内容<script type="text/javascript">func
- 前言大家都知道,英文的分词由于单词间是以空格进行分隔的,所以分词要相对的容易些,而中文就不同了,中文中一个句子的分隔就是以字为单位的了,而所