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之引用和类属性的初步理解
May 15 Python
python实现马耳可夫链算法实例分析
May 20 Python
python中字符串前面加r的作用
Jun 04 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
May 24 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
python print 按逗号或空格分隔的方法
May 02 Python
python正向最大匹配分词和逆向最大匹配分词的实例
Nov 14 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
Apr 07 Python
python 基于DDT实现数据驱动测试
Feb 18 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
浅谈Python数学建模之固定费用问题
Jun 23 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-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
2013/07/03 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
Python高效编程技巧
2013/01/07 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
Python lambda表达式用法实例分析
2018/12/25 Python
Python模块的加载讲解
2019/01/15 Python
python开发游戏的前期准备
2019/05/05 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
教师评语大全
2014/04/28 职场文书
党员承诺践诺书
2014/05/20 职场文书
经济管理专业求职信
2014/06/09 职场文书
合同意向书范本
2014/07/30 职场文书
公司领导班子对照材料
2014/08/18 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
2016年春节问候语
2015/11/11 职场文书
德劲DE1102数字调谐收音机机评
2022/04/07 无线电