资讯专栏INFORMATION COLUMN

详解python中正则表达式的反斜线的转义功能

gggggggbong / 3440人阅读

摘要:最近深入研读了正则表达式的一本经典著作,对于在中使用正则表达式时使用反斜线转义功能时有些心得,特与大家分享。核心思想在中使用正则表达式时要切记反斜线具有两层转义功能,如果你要匹配一个反斜线本身时要注意它必须被转义两次。

最近深入研读了正则表达式的一本经典著作,对于在python中使用正则表达式时使用反斜线转义功能时有些心得,特与大家分享。
核心思想:在python中使用正则表达式时要切记反斜线具有两层转义功能,如果你要匹配一个反斜线本身时要注意它必须被转义两次。(除非你使用原始字符串,就是字符串前面加r)
我们先来看一个例子:

import re
a = re.match("","")
  File "", line 2
    a = re.match("","")
                            ^
SyntaxError: unexpected character after line continuation character

上面这个例子本身就不合语法要求,那么为什么呢? 首先在
python中,因为正则表达式本身是一个字符串,所以它要遵守字符串的规则——反斜线表示转义符
而在正则表达式中反斜线又是一个具有转义功能的元字符,所以反斜线具备了双重转义功能

回到例子中,第一个转义了第二个,此时第二个去除了字符串转义符的身份,但是它还有正则表达式转义元字符的身份

也就是说第二个仍然具备转义功能,那么它转义谁呢?它只能转义第三个,可是第三个它具备两层身份(字符串的转义符和正则表达式的转义元字符)

所以现在有两种可能情况发生:

第一种,第二个无法转义第三个,因为身份不符,一个是正则表达式转义元字符,另一个是字符串转义符

第二种,第二个转义了第三个,但是这种转义也仅仅是去除了一层身份,但是它还有一层身分(转义元字符)结果就是第三个仍然具有转义功能。

总之不管这时发生了哪种情况,第三个最终结果就是仍然具备转义功能,他会转义它后面的单引号,使得整段代码语法错误。

所以正确的写法是再添加一个反斜线,四个反斜线,两两转义之后最终转义成匹配多带带一个反斜线的功能

import re
a = re.match("","")
print(a)
#显示的结果match="",之所以显示两个反斜线是因为语法规定一个反斜线无法显示(是转义符)
<_sre.SRE_Match object; span=(0, 1), match="">

当然也可以使用原始字符串的方法,在字符串前面加r,这时里面的反斜线就失去字符串转义符的功能了,本文主要讨论实质原理,不是方法

import re
a = re.match(r"","")
print(a)
<_sre.SRE_Match object; span=(0, 1), match="">

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42560.html

相关文章

  • 《Java编程思想》笔记13.字符串

    摘要:的构造器经过重载可以接受多种输出目的地,不过最常用的还是和。组号为表示整个表达式,组号表示被第一对括号括起的组,依此类推。有多个重载的构造器,可以接受和对象。 点击进入我的博客 字符串操作是计算机程序设计中最常见的行为 13.1 不可变String String底层是由char[]实现的,是不可变的。看起来会改变String的方法,实际上都是创建了一个新的String对象,任何指向它...

    since1986 评论0 收藏0
  • 关于Java正则转义和\理解

    摘要:作为的转义字符在字符常量中,反斜杠是一个特殊的字符,被称为转义字符,它的作用是用来转义后面一个字符。中的第一个表示的转义字符由编译器解析,第二个是正则表达式由正则表达式引擎解析。 的定义 一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。 转义就是指转换该字符的原本意义,从而变成另外的意义。 作为Java的转义字符 1.在java字...

    JerryZou 评论0 收藏0
  • PHP变量类型

    摘要:获取变量的类型,使用函数。要检验某个类型,可以使用函数,如是在整形是在浮点型是在字符串如果需要将一个变量强制转换为某类型,可以对其使用强制转换或者函数。自起,此限制仅对包含变量时有效。 简介 PHP支持9种原始数据类型。 4种标量类型: boolean布尔型 integer 整形 float 浮点型(也称作double) string 字符串 3种复合类型: array...

    selfimpr 评论0 收藏0
  • 搞定PHP面试 - 正则达式知识点整理

    摘要:是决定正则表达式匹配规则的主要部分。二分隔符分隔符的选择当使用函数的时候,正则表达式必须由分隔符闭合包裹。果分隔符经常在正则表达式内出现,最好使用其他分隔符来提高可读性。需要将一个字符串放入正则表达式中使用时,可以用函数对其进行转义。 一、简介 1. 什么是正则表达式 正则表达式(Regular Expression)就是用某种模式去匹配一类字符串的一种公式。正则表达式使用单个字符串来...

    AaronYuan 评论0 收藏0
  • 正则达式之量词

    摘要:点号正则中,有一个特殊的特殊的元字符,点号,它可以匹配任意字符,除了换行符。表各种量词的转义量词转义形式除此之外,元字符点也需要加反斜线来进行转义。   我们知道,在正则表达式中,可以使用[0-9]或d来匹配单个数字字符,但是,如果需要验证一个更复杂的字符串呢,比如大陆地区的邮政编码。  不过邮政编码并没有特别规定,只有由6个数字组成的字符串而已, 如246512,根据[0-9]或d,...

    lansheng228 评论0 收藏0

发表评论

0条评论

gggggggbong

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<