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
投稿

猜你喜欢

  • 利用Python多线程实现图片下载器

    2022-02-12 06:07:41
  • Python中scatter散点图及颜色整理大全

    2022-10-06 02:17:51
  • python 实现简单的FTP程序

    2021-03-29 10:33:00
  • 利用Python计算圆周率π的实例代码

    2021-01-08 23:26:43
  • Python利用matplotlib.pyplot.boxplot()绘制箱型图实例代码

    2022-11-18 05:08:26
  • CSS content, counter-increment 和 counter-reset详解[译]

    2009-06-02 12:51:00
  • python区块链简易版交易实现示例

    2023-09-28 15:20:10
  • CSS经验:因为编码差异 导致IE6不能正常解析CSS文件

    2010-06-06 13:55:00
  • Python编程argparse入门浅析

    2023-11-05 09:53:01
  • JavaScript实现全选取消效果

    2023-08-27 16:26:42
  • 基于Python中单例模式的几种实现方式及优化详解

    2022-10-24 14:20:45
  • css布局自适应高度方法

    2007-05-11 17:03:00
  • 用ASP实现远程批量文件改名

    2007-09-12 12:23:00
  • python字符串拼接.join()和拆分.split()详解

    2021-11-12 04:09:17
  • tensorflow 实现打印pb模型的所有节点

    2022-09-28 22:37:33
  • 教你使用Python连接oracle

    2023-09-11 01:38:54
  • Python cookbook(数据结构与算法)筛选及提取序列中元素的方法

    2023-04-27 19:46:34
  • SQL Server数据在不同数据库中的应用

    2008-12-24 15:34:00
  • python基本数据类型练习题

    2022-07-21 14:26:26
  • Python爬虫scrapy框架Cookie池(微博Cookie池)的使用

    2023-03-25 00:27:03
  • asp之家 网络编程 m.aspxhome.com