基础知识,Python中匹配特殊字符问题 \的含义:将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。 例如,’n’ 匹配字符 "n"。’\n’ 匹配一个换行符。序列 ‘\\’ 匹配 "\" 而 "\(" 则匹配 "("。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 转义符号 正则表达式还支持大部分 Python 字符串的转义符号:\a,\b,\f,\n,\r,\t,\u,\U,\v,\x,\\ 注1:\b 通常用于匹配一个单词边界,只有在字符类中才表示“退格” 注2:\u 和 \U 只有在 Unicode 模式下才会被识别 注3:八进制转义(\数字)是有限制的,如果第一个数字是 0,或者如果有 3 个八进制数字, 那么就被认为是八进制数;其他情况则被认为是子组引用;至于字符串,八进制转义总是最多只能是 3 个数字的长度 问题一:re.match("\a","\a")匹配的时候为什么得到的是'\x07'? '\x07'是对应ASCII编码,python默认编码格式是utf-8,如果有时候utf-8中的编码中也会和ASCII重合部分,就会出现这种情况。 下面是在ipython3进入的终端上的代码: re.match("a","a") Out[6]: <_sre.SRE_Match object; span=(0, 1), match='a'> In [7]: re.match("\a","\a")#按理说"\a"匹配"\a",应为是"\a"为什么是'\x07'呢? Out[7]: <_sre.SRE_Match object; span=(0, 1), match='\x07'> In [8]: re.match(r"\a","\a") Out[8]: <_sre.SRE_Match object; span=(0, 1), match='\x07'> In [183]: len("abc")#普通字符的长度是3 Out[183]: 3 In [9]: rs = r"\a" In [10]: len("\x07") #长度为1,并不是长度3,证明不是普通的字符 Out[1]: 1 下面证明A可以匹配\x41,\x41是对应的ascii吗中的A In [103]: re.match(r"\x41","A") Out[103]: <_sre.SRE_Match object; span=(0, 1), match='A'> In [104]: re.match("\x41","A") Out[104]: <_sre.SRE_Match object; span=(0, 1), match='A'> 下面的证明\x07就是\a In [106]: re.match("\x07","\a") Out[106]: <_sre.SRE_Match object; span=(0, 1), match='\x07'> In [107]: re.match(r"\x07","\a") Out[107]: <_sre.SRE_Match object; span=(0, 1), match='\x07'> 问题二、re.match(r"\\w","\w")为什么匹配得到的是'\\w'? 原因:Python正则表达式匹配特殊字符\w的时候转换成\\w再匹配 下面两个是匹配失败的 In [134]: re.match("\w","\w")#匹配失败的,为什么? In [135]: re.match(r"\w","\w")#匹配失败的,为什么? In [142]: re.match("\\w","\w")#匹配失败,为什么? In [136]: re.match(r"\\w","\w") Out[136]: <_sre.SRE_Match object; span=(0, 2), match='\\w'> 说明'\\w' 匹配的结果'\\w'怎么会多一个'\'呢,原因在于工具的不同,显示不同内容,换一个工具pycharm大于看看 import re result = re.match(r"\\w","\w").group() print(result)#输出\w 发现打印的是\w,也就是说终端\\w是为了显示\w,转义加上\,而pycharm中输出的是已经转义的了。 也就是说\\w要输出\w,特有加上了\,变成了\\w 证明想法: s = "\\w" print(s)#发现不管在终端和pycharm运行结果打印的是\w,证明了想法。 接下来证明 In [136]: re.match(r"\\w","\w") <_sre.SRE_Match object; span=(0, 2), match='\\w'> 应为r"\\w"等价于 "\\\\w" ; 那么问题来了,怎么 "\\\\w" 能匹配"\w"?我的猜想,字符串的"\w"估计不是字符串的"\w",而是"\\w" 证实我的猜想是否正确? n [143]: re.match("\\\\w","\\w") Out[143]: <_sre.SRE_Match object; span=(0, 2), match='\\w'> 发现全是如此,也就是说字符串中的\w等价于\\w,在匹配的过程中按照\\w匹配了。 如果按照此原理就能解释下面的情况了 下面是在ipython3进入的终端上的代码: In [147]: re.match(r"\\d","\d") Out[147]: <_sre.SRE_Match object; span=(0, 2), match='\\d'> In [152]: re.match(r"\\s","\s") Out[152]: <_sre.SRE_Match object; span=(0, 2), match='\\s'> n [153]: re.match(r"\\W","\W") Out[153]: <_sre.SRE_Match object; span=(0, 2), match='\\W'> In [154]: re.match(r"\\S","\S") Out[154]: <_sre.SRE_Match object; span=(0, 2), match='\\S'> In [155]: re.match(r"\\D","\D") Out[155]: <_sre.SRE_Match object; span=(0, 2), match='\\D'> In [177]: re.match(r"\\B","\B") Out[177]: <_sre.SRE_Match object; span=(0, 2), match='\\B'> Out[35]re.match(r"\\j","\j") Out[36]: <_sre.SRE_Match object; span=(0, 2), match='\\j'> 问题三,表示边界中的\b,当成字符串去正则中匹配的时候就是本身\b和re.match(r"\\b","\b")没有匹配成功的原因 In [166]: re.match(r"\\w","\w")#匹配成功上面已经证实了原因 Out[166]: <_sre.SRE_Match object; span=(0, 2), match='\\w'> In [167]: re.match(r"\\b","\b")#这个怎么又没有匹配上呢 In [169]: re.match(r"\b","\b")#匹配失败 应为"\b"不等价于"\\b",就是本身自己"\b",又因为r"\b"等价于"\\b"的 正则表达式是:"\\b" ,要匹配的字符串是:"\b",他们都是普通字符了,他们是不匹配的,先这样想,接下来证实一下。 要想匹配普通字"\b",正则表达式只要写:"\b"即可。 证实我的想法如下: In [170]: re.match("\b","\b") Out[170]: <_sre.SRE_Match object; span=(0, 1), match='\x08'> In [172]: re.match("\x08","\b") Out[172]: <_sre.SRE_Match object; span=(0, 1), match='\x08'> In [174]: re.match(r"\b","\b")#匹配不成功 综上所述表示边界中的\b,当成字符串去正则中匹配的时候就是本身\b 因此re.match(r"\\b","\b")没有匹配的原因也是上面的原理。 根据刚才的原理,也可以解释 In [179]: re.match(r"\\$","\$")匹配失败 In [179]: re.match(r"\\^","\^")匹配失败 同样也可以解释 In [55]: re.match("\n","\n") Out[55]: <_sre.SRE_Match object; span=(0, 1), match='\n'> In [56]: re.match("\na","\na") Out[56]: <_sre.SRE_Match object; span=(0, 2), match='\na'> In [59]: re.match("\\\\nabc","\\nabc") Out[59]: <_sre.SRE_Match object; span=(0, 5), match='\\nabc'> In [60]: re.match(r"\\nabc","\\nabc") Out[60]: <_sre.SRE_Match object; span=(0, 5), match='\\nabc'> r"\\nabc"等价'\\\\nabc' 参考文献: https://www.zhihu.com/question/23374078 http://blog.csdn.net/l347129991/article/details/70257704 http://www.cnblogs.com/jingleguo/archive/2008/06/02/1211820.html http://www.360doc.com/content/13/0125/13/3046928_262317374.shtml
相关推荐
正则表达式笔记(re.search/re.match/re.split/re.compile/用法) - douzujun - 博客园博客园首页新随笔联系订阅管
re.match()的概念是从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None。 包含的参数如下: pattern: 正则模型 string : 要匹配的字符串 falgs : 匹配模式 match...
匹配成功,re.match() 返回一个匹配的对象,否则返回None. pattern – 匹配的正则表达式 string – 要匹配的字符串 flags – 标志位,控制正则表达式的匹配方式,如,是否区分大小写,多行匹配等. e.g. #!/usr/...
本文实例讲述了Python3中正则模块re.compile、re.match及re.search函数用法。分享给大家供大家参考,具体如下: re模块 re.compile、re.match、 re.search re 模块官方说明文档 正则匹配的时候,第一个字符是 r,...
介绍: match()方法用于从字符串的开始位置进行匹配,如果起始位置匹配成功,则返回Match对象,否则返回None 语法: re.match(pattern,string,[flags]) pattern: 模式字符串 string:要匹配的字符串 flags:可选参数,比如...
第十五天 03re.Match类介绍【千锋Python人工智能学院】1
Rematch 简体中文版 本地化文件
re.complile() 返回的是 re.RegexObject对象,可以用于 pattern.findall() ,pattern.sub()等方法使用 得到 re.MatchObject对象 此 match 对象可以调用 match.group() ,match.span,match.start() 方法,具体的如下...
re模块中的常用函数 2.1 re.match() re.match()函数用于从字符串的开头匹配一个模式。如果匹配成功,返回一个匹配对象;否则返回None。 语法:re.match(pattern, string, flags=0) 其中,pattern是正则表达式,...
re.match(pattern, string, flags=0) 这个函数尝试从字符串的起始位置匹配一个模式,如果匹配成功,就返回一个匹配对象,否则返回None。其中,pattern是正则表达式,string是要匹配的字符串,flags是可选的匹配模式...
“JGood is a handsome boy, he is cool, clever, and so on…” m = re.match(r”(\w+)\s”, text) if m: print m.group(0), ‘\n’, m.group(1) else: print ‘not match’ re.match的函数原型为:re.match...
REVisionFX RE:Match for Mac是一款适用于ae和pr的色彩匹配插件,re:match mac 可以匹配不同镜头之间的色彩,曝光,白平衡,局部色彩匹配等,当你用不同摄像机拍了同一个场景,那么re:match这款插件可以很好的来匹配...
Angular-rematch.zip,redux框架入门,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序工作流。
首先来个简单的例子,...if re.match(r'[0-9a-zA-Z_]{0,19}@163.com',text): print('Email address is Right!') else: print('Please reset your right Email address!') 接着来一个匹配所有邮箱格式的代码: #-*-
RE:Match是一款非常实用的AE和premiere色彩匹配插件,安装后可以帮助您完成不同镜头拍摄的效果匹配,包含了色彩,曝光,白平衡,局部色彩等,有需要的朋友赶快来下载体验一下吧。 汉化方法: “REMatch1.3.6...
match()和search()都是python中的正则匹配函数,那这两个函数有何区别呢? match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个...m = re.match(r"\w+", text) if m: print m.group(0) else: