python正则表达式 匹配反斜杠的操作方法


Posted in Python onAugust 07, 2020

python正则表达式 匹配反斜杠

正则 需要把原始字符串不被转义的条件下传递给正则模块,正则再去转义。
r表示r后面的字符串为原始字符串,防止计算机将 \ 理解为转义字符。
r'^\\$' 首先按照原始字符串给到compile函数 ,正则再把r'^\\$'中的\`翻译成\

backslash='\\'
print(backslash)
regular_backslash=re.compile(r'^\\$')
print(regular_backslash.search(regular_backslash)

金额5.00中的 . 要使用 \.来匹配 。因为正则中.匹配可以所有的字符, 需要\.表示点。

import re
#匹配日期
date_regular = re.compile(r'^(\d{4})-(\d{2})-(\d{2})$')
print(date_regular.search('2017-33-12'))

#匹配金额 比如 5 5.00等金额 
money_regular = re.compile(r'^(\d{1,})\.(\d{1,})$|^(\d{1,})$')
print(money_regular.match('5.8'))

#匹配纯数字
number_regular = re.compile(r'^\d{1,}$')
print(number_regular.search('5'))

PS:下面看下Python字符串和正则表达式中的反斜杠(‘\‘)问题

在Python普通字符串中

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

In [1]: print('abc\ndef') # '\n'具有换行的作用
abc
defg

In [2]: print('abc\tdef') # '\t'具有制位符的作用      
abc defg

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

In [3]: print('abc\\tdef') # 使'\'成为一个普通的字符,没有转义作用
abc\tdef

In [4]: print('abc\'tdef') # 使'''成为一个普通的字符,不再需要和另一半单引号'''配对       
abc'tde

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

在Python原生字符串中

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

In [5]: print(r'abc\ndefg') # '\n'没有换行的作用,仅仅是一个普通的字符串       
abc\ndefg

In [6]: print(r'abc\tdefg') # '\t'没有制位符的作用,仅仅是一个普通的字符串     
abc\tdef

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

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

Python正则表达式中会有一些不同,正则表达式中指定了一些元字符(metacharacter),如下. ^ $ * + ? { } [ ] \ | ( )
它们都具有特殊的含义,''也属于元字符。''既属于Python中的特殊字符,也属于正则中的元字符,所以使用时得非常小心。那么在正则中,''的作用是什么呢?我们看一个例子

In [7]: re.search('.', 'sd.f')        
Out[7]: <_sre.SRE_Match object; span=(0, 1), match='s'>

In [8]: re.search('\.', 'sd.f')       
Out[8]: <_sre.SRE_Match object; span=(2, 3), match='.'>In [9]: re.search('\n', 'sdfd\nfds')      Out[9]: <_sre.SRE_Match object; span=(4, 5), match='\n'>

"""
'.'作为一个元字符,它的特殊含义是匹配任意一个字符,
而当我们在其前面加'\'后,它的特殊含义消失了,匹配到的是'.';
而且'\'依然可以把Python中某些字符转义成特殊字符。
"""

所以,''的作用是剥夺元字符的特殊含义,使其成为一个Python字符,所以它还是会具有在Python普通字符串中的转义作用,比如'\n'依然表示换行。所以,''既是正则中的一个元字符,又是Python中的一个特殊字符。那么我们该如何匹配到纯字符''(无任何特殊意义)?

在正则中,''的作用是把元字符转义成Python字符串文字(a Python string literal),所以正则中的'\'其实是其实是Python字符中的'',它仍然还具有转义作用,所以在正则中我们还得对每个''再进行转义一次,即'\\',这样就可以匹配到纯字符''了。看下面例子

In [10]: re.search('\\\\', 'fsd\nfds') # 目标字符串中没有纯字符'\',所以匹配为空

In [11]: re.search('\\\\', 'fsd\\nfds')           
Out[11]: <_sre.SRE_Match object; span=(3, 4), match='\\'> # Python字符串中,'\\'就是纯字符'\'

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

In [12]: re.search(r'\\', 'fsd\\nfds') # 两个'\\'就可以匹配到纯字符'\'
Out[12]: <_sre.SRE_Match object; span=(3, 4), match='\\'>

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

In [13]: re.search(r'\n', 'fsd\nfds')           
Out[13]: <_sre.SRE_Match object; span=(3, 4), match='\n'>
"""
在Python字符中,r'\n'仅仅表示纯字符串'\n',没有换行的作用;
在正则中,r'\n'依然还有换行的作用。
所以此时我们不能用奇数个'\'来结尾某个正则表达式,这样导致结束的引号被转义成一个纯字符,无结束符号。
所以,在Python原生字符串中,我们也同样规定不能用奇数个'\'来结尾。
"""

总结

到此这篇关于Python字符串和正则表达式中的反斜杠(‘\‘)问题的文章就介绍到这了,更多相关Python字符串和正则表达式中的反斜杠(‘\‘)问题内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
跟老齐学Python之从格式化表达式到方法
Sep 28 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 Python
Python多进程并发与多线程并发编程实例总结
Feb 08 Python
nohup后台启动Python脚本,log不刷新的解决方法
Jan 14 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
Dec 04 Python
Django+python服务器部署与环境部署教程详解
Mar 30 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 Python
详解KMP算法以及python如何实现
Sep 18 Python
python连接mongodb数据库操作数据示例
Nov 30 Python
Python排序函数的使用方法详解
Dec 11 Python
Python中re模块的元字符使用小结
Apr 07 Python
Pygame框架实现飞机大战
Aug 07 #Python
python爬取网易云音乐热歌榜实例代码
Aug 07 #Python
Python变量格式化输出实现原理解析
Aug 06 #Python
Python实现Canny及Hough算法代码实例解析
Aug 06 #Python
vscode调试django项目的方法
Aug 06 #Python
Python如何使用input函数获取输入
Aug 06 #Python
Python map及filter函数使用方法解析
Aug 06 #Python
You might like
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
php微信开发之图片回复功能
2018/06/14 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
JqGrid web打印实现代码
2011/05/31 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
2020/04/16 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
js数据类型检测总结
2018/08/05 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
使用python实现strcmp函数功能示例
2014/03/25 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
python计算无向图节点度的实例代码
2019/11/22 Python
python 字典套字典或列表的示例
2019/12/16 Python
Python中if有多个条件处理方法
2020/02/26 Python
Python Django搭建网站流程图解
2020/06/13 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
生产车间实习自我鉴定
2013/09/23 职场文书
幼儿园秋游活动方案
2014/01/21 职场文书
高中体育教学反思
2014/01/29 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
惊涛骇浪观后感
2015/06/05 职场文书