我是靠谱客的博主 舒适棒棒糖,最近开发中收集的这篇文章主要介绍python 正则findall右斜杠_Python正则表达式匹配反斜杠问题解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

解决Python正则表达式匹配反斜杠╲问题

在学习Python正则式的过程中,有一个问题一直困扰我,如何去匹配一个反斜杠(即“”)?

一、引入

在学习了Python特殊字符和原始字符串之后,我觉得答案应该是这样的:

1)普通字符串:'\'

2)原始字符串:r''

但事实上在提取诸如“38”反斜杠之前的数字时,我屡次碰壁,始终得不到结果。最终发现自己理解错了,原来原始字符串和“正则转义”没有一点关系;下面详细谈一谈。

二、字符串转义

反斜杠,在Python中比较特殊,就是它可以用来构成一些特殊字符,比如“n”表示换行,“t”表示制表符。下面是使用“n”的一行代码:

>>>print ('HelloWorldnPython' )

结果为:

“HelloWorld

Python“

可以看到其中的“n”已转义为换行符,而“W”没有发生转义,原因是“W”在“字符串转义”中并不对应着特殊字符,没有特殊含义。

如果现在要求变了,要求不对“n”转义为换行,而是原封不动输出为“HelloWorldnPython”,该怎么办呢?

1)可以这样写“HelloWorld\nPython”,这样输出的时候,“字符串转义”会把“\”转义为“”;

2)也可使用另一种方法:原始字符串;原始字符串(即r'...'):字符串中所有字符都直接按照字面意思来使用,不转义特殊字符。

下面是使用原始字符串的代码:

print r'HelloWorldnPython'

结果为:

“HelloWorldnPython”

可以清楚看到,在使用原始字符串之后,“n”未被转义为换行符,而是直接被输出了。

三、正则转义

好了,上面讲的只是“字符串转义”。同理,在正则表达式中也存在转义,我们姑且先称其为“正则转义”,其与“字符串转义”完全不同,比如“d”代表数字,“s”代表空白符。下面我们先编写开头的例子,然后再分析。

提取“38”反斜杠之前的数字:

import re

string = '38'

m = re.search('(d+)\\', string)

if m is not None:

print m.group(1) # 结果为:3

n = re.search(r'(d+)\', string)

if n is not None:

print n.group(1) # 结果为:3

正则表达式字符串需要经过两次转义,这两次分别是上面的“字符串转义”和“正则转义”,个人认为“字符串转义”一定先于“正则转义”。

1)'\\'的过程:

先进行“字符串转义”,前两个反斜杠和后两个反斜杠分别被转义成了一个反斜杠;即“\|\”被转成了“|”(“|”为方便看清,请自动忽略)。“字符串转义”后马上进行“正则转义”,“\”被转义为了“”,表示该正则式需要匹配一个反斜杠。

2)r'\'的过程:

由于原始字符串中所有字符直接按照字面意思来使用,不转义特殊字符,故不做“字符串转义”,直接进入第二步“正则转义”,在正则转义中“\”被转义为了“”,表示该正则式需要匹配一个反斜杠。

四、结论

也就是说原始字符串(即r'...')与“正则转义”毫无关系,原始字符串仅在“字符串转义”中起作用,使字符串免去一次转义。

总结

以上所述是小编给大家介绍的解决Python正则表达式匹配反斜杠''''问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

您可能感兴趣的文章:

最后

以上就是舒适棒棒糖为你收集整理的python 正则findall右斜杠_Python正则表达式匹配反斜杠问题解析的全部内容,希望文章能够帮你解决python 正则findall右斜杠_Python正则表达式匹配反斜杠问题解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部