Python——字符串和正则表达式中的反斜杠('\\')问题详解

在本篇文章里小编给大家整理的是关于Python字符串和正则表达式中的反斜杠(\’\\\’)问题以及相关知识点,有需要的朋友们可以学习下。

在Python普通字符串中

在Python中,我们用\’\\\’来转义某些普通字符,使其成为特殊字符,比如

我们还可以用\’\\\’来转义特殊字符,使其成为普通字符,比如

在Python原生字符串中所以,在python普通字符串中,我们不能以奇数个\’\\\’结尾,这样会导致结束的的引号转义成一个纯字符,从而使得这段字符串没有引号来结束。

我们在字符串前加一个\’r\’来表示原生字符串,比如r\’abc\’。原生字符串中的特殊字符的特殊含义将会被剥夺掉,如下

这里有一个奇怪的问题,在原生字符串中,虽然\’\\\’成为了一个普通的字符串,但我们同样不能以奇数个\’\\\’字符串结尾,这是因为Python正则表达式的原因,在正则表达式中我们将会解释这个问题。

在Python(regular express)正则表达式中

Python正则表达式中会有一些不同,正则表达式中指定了一些元字符(metacharacter),如下

它们都具有特殊的含义,\’\\\’也属于元字符。\’\\\’既属于Python中的特殊字符,也属于正则中的元字符,所以使用时得非常小心。那么在正则中,\’\\\’的作用是什么呢?我们看一个例子

在正则中,\’\\\’的作用是把元字符转义成Python字符串文字(a Python string literal),所以正则中的\’\\\\\’其实是其实是Python字符中的\’\\\’,它仍然还具有转义作用,所以在正则中我们还得对每个\’\\\’再进行转义一次,即\’\\\\\\\\\’,这样就可以匹配到纯字符\’\\\’了。看下面例子所以,\’\\\’的作用是剥夺元字符的特殊含义,使其成为一个Python字符,所以它还是会具有在Python普通字符串中的转义作用,比如\’\\n\’依然表示换行。所以,\’\\\’既是正则中的一个元字符,又是Python中的一个特殊字符。那么我们该如何匹配到纯字符\’\\\'(无任何特殊意义)?

在re中反复的使用\’\\\’,这可能会生成大量的连续的反斜杠,从而导致某些字符串难以理解。解决的办法是用Python原生字符串来书写正则表达式,如下

另外,当我们用原生字符串来书写正则表达式时,Python字符中的特殊字符依然有效,比如

以上就是本次介绍的全部知识点内容,觉得文章还可以的话不妨点个赞,有任何意见或者看法欢迎大家评论!

我是一名python开发工程师,整理了一套python的学习资料,如果你想提升自己,对编程感兴趣,关注我并在后台私信小编:“08”即可免费领取资料!希望对你能有所帮助!

Python中使用re模块实现正则表达式的替换字符串操作

我是\”学海无涯自学不惜!\”,关注我,一同学习简单易懂的Python编程。

Python中,导入re模块后还可以进行字符串的替换操作,就是sub()方法,具体的语法格式如下:

re.sub(pattern,repl,str,count,flags)

和昨天学过的三种匹配字符串的方法一样,模块名re使用一个点\”.\”和方法名sub连接;

方法名sub后的小括号可以设置五个参数,前三个必备,后两个可选,中间使用逗号\”,\”分隔;

第一个参数是老熟人pattern,代表正则表达式转换的模式字符串;

第二个参数repl,则代表了要替换为的字符,具体操作是使用引号把字符引用起来;

第三个参数也是老熟人str,代表要被匹配替换的字符串;

第四个就是可选参数count,代表模式匹配后被替换的最大次数,可省略,默认值为0—即为替换全部匹配字符;

第五个可选参数flags,和匹配字符串三种方法的作用一样,代表标志位,标志值见上节内容常用标志列表。

格式和参数说完了,接下来就是实例。

这个东西,中文叫\”钱\”,英文叫\”money\”,设定一段字符串,然后将其中所有的\”钱\”替换成\”money\”,具体代码和结果,详见下图:

实例1

上面的例子中,第一次匹配替换的模式字符串就是一个字\”钱\”,所以替换的结果很显眼的成功了,第二次的模式字符串多加了一个空格变成\”钱 \”,结果原字符串没有丝毫变化的输出了,没有出现异常。

这说明使用sub()方法替换字符串的时候如果不匹配,就会返回原字符串。

接下来看一个场景,借用上一节的电信手机号码验证模拟,如果是电信手机号码,直接将其替换为中奖信息,希望所有的手机用户都中奖,详见下图:

实例2

这段代码喜庆不喜庆呢朋友们,接下来的这段代码更喜庆,向神话中的灯神许愿,看看灯神能不能满足您的愿望,详见下图:

实例3

今天的\”替换字符串\”内容就是这些了,感谢大家一直以来的支持,明天开始奉上的是\”使用re模块实现正则表达式的分割字符串操作\”的内容,敬请拭目以待。

为自己加油,我是\”学海无涯自学不惜!\”

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。