Java及python正则表达式详解


Posted in Python onDecember 27, 2017

正则表达式语法及常用元字符:

正则表达式有元字符及不同组合来构成,通过巧妙的构造正则表达式可以匹配任意字符串,并完成复杂的字符串处理任务。

常用的元字符有:

其中在使用反斜线时要注意:如果以‘\'开头的元字符与转义字符相同,则需要使用‘\\'或者原始字符串,在字符串前面加上字符‘r'或‘R'。原始字符串可以减少用户的输入,主要用于‘\\',主要用于正则表达式和文件路径字符串,如果字符串以一个‘\'结束,则需要多加一个斜线,以‘\\'结束。

Java及python正则表达式详解

\  :将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。

常用正则表达式的写法:

‘[a-zA-Z0-9]':匹配字母或数字
‘[^abc]':匹配除abc之外的字母
‘p(ython|erl)'匹配Python和perl
‘(pattern)*'匹配0次或多次
‘(pattern)+'匹配1次或多次
‘(pattern){m,n}'匹配m_n次
‘(a|b)*c'匹配0-n次a或b后面紧跟c
‘^[a-zA-Z]{1}([a-zA-Z0-9\._]){4,19}$'匹配20个字符以字母开始
‘^(\w){6,20}$'匹配6-20个单词字符
‘^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$'匹配IP
‘^[a-zA-Z]+$'检查字符中只包含英文字母
‘\w+@(\w+\.)\w+$'匹配邮箱
‘[\u4e00-\u9fa5]'匹配汉字
‘^\d{18|\d{15}$'匹配身份证
‘\d{4}-\d{1,2}-\d{1,2}'匹配时间
‘^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[,._]).{8,}$)'判断是否为强密码
‘(.)\\1+'匹配任意字符的一次或多次出现

re模块常用方法介绍:

compile(pattern[,flags])创建模式对象
search(pattern,string[,flags])在整个字符中寻找模式,返回match对象或者None
match(pattern,string[,flags])从字符串的开始处于匹配模式,返回匹配对象
findall(pattern,string[,flags]):列出匹配模式中的所有匹配项
split(pattern,string[,maxsplit=0])根据匹配模式分割字符串
sub(pat,repl,string[,count=0])将字符串中所有pat匹配项用repl替换
escape(string)将字符中的所有特殊正则表达式字符转义

match,search,findall区别

match在字符串开头或指定位置进行搜索,模式必须出现在开头或指定位置;
search方法在整个字符串或指定位置进行搜索;
findall在字符串中查找所有符合正则表达式的字符串并以列表返回。

子模式与match对象

正则表达式中match和search方法匹配成功后都会返回match对象,其中match对象的主要方法有group()(返回匹配的一个或多个子模式内容),groups()(方法返回一个包含匹配所有子模式内容的元组),groupdict()(方法返回一个包含匹配所有子模式内容的字典),start()(返回子模式内容的起始位置),end()(返回子模式内容的结束位置)span()(返回包含指定子模式内容起始位置和结束位置前一个位置的元组)

代码演示

>>> import re
>>> m = re.match(r'(\w+) (\w+)','Isaac Newton,physicist')
>>> m.group(0)
'Isaac Newton'
>>> m.group(1)
'Isaac'
>>> m.group(2)
'Newton'
>>> m.group(1,2)
('Isaac', 'Newton')
>>>m=re.match(r'(?P<first_name>\w+)(?P<last_name>\w+)','Malcolm Reynolds')
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'
>>> m.groups()
('Malcolm', 'Reynolds')
>>> m.groupdict()
{'first_name': 'Malcolm', 'last_name': 'Reynolds'}

验证并理解子模式扩展语法的功能

>>> import re
>>> exampleString = '''There should be one--and preferably only one--obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never. 
Although never never is often better than right now.'''
>>> pattern = re.compile(r'(?<=\w\s)never(?=\s\w)')
>>> matchResult = pattern.search(exampleString)
>>> matchResult.span()
(171, 176)
>>> pattern = re.compile(r'(?<=\w\s)never')
>>> matchResult = pattern.search(exampleString)
>>> matchResult.span()
(154, 159)
>>> pattern = re.compile(r'(?:is\s)better(\sthan)')
>>> matchResult = pattern.search(exampleString)
>>> matchResult.span()
(139, 153)
>>> matchResult.group(0)
'is better than'
>>> matchResult.group(1)
' than'
>>> pattern = re.compile(r'\b(?i)n\w+\b')
>>> index = 0
>>> while True:
 matchResult = pattern.search(exampleString,index)
 if not matchResult:
 break
 print(matchResult.group(0),':',matchResult.span(0))
 index = matchResult.end(0)

not : (90, 93)
Now : (135, 138)
never : (154, 159)
never : (171, 176)
never : (177, 182)
now : (210, 213)
>>> pattern = re.compile(r'(?<!not\s)be\b')
>>> index = 0
>>> while True:
 matchResult = pattern.search(exampleString,index)
 if not matchResult:
 break
 print(matchResult.group(0),':',matchResult.span(0))
 index = matchResult.end(0)

be : (13, 15)
>>> exampleString[13:20]
'be one-'
>>> pattern = re.compile(r'(\b\w*(?P<f>\w+)(?P=f)\w*\b)')
>>> index = 0
>>> while True:
 matchResult = pattern.search(exampleString,index)
 if not matchResult:
 break
 print(matchResult.group(0),':',matchResult.group(2))
 index = matchResult.end(0)+1

unless : s
better : t
better : t
>>> s = 'aabc abbcd abccd abbcd abcdd'
>>> p = re.compile(r'(\b\w*(?P<f>\w+)(?P=f)\w*\b)')
>>> p.findall(s)
[('aabc', 'a'), ('abbcd', 'b'), ('abccd', 'c'), ('abbcd', 'b'), ('abcdd', 'd')]

以上就是关于python正则表达式的相关内容,更多资料请查看三水点靠木以前的文章。 

Python 相关文章推荐
Python实现简单的可逆加密程序实例
Mar 05 Python
Python socket网络编程TCP/IP服务器与客户端通信
Jan 05 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
Django框架自定义session处理操作示例
May 27 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
简单了解python中的与或非运算
Sep 18 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
django 获取字段最大值,最新的记录操作
Aug 09 Python
python实现马丁策略的实例详解
Jan 15 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 Python
python 指定源路径来解决import问题的操作
Mar 04 Python
python matplotlib画图实例代码分享
Dec 27 #Python
python爬虫使用cookie登录详解
Dec 27 #Python
Python爬虫番外篇之Cookie和Session详解
Dec 27 #Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 #Python
利用 python 对目录下的文件进行过滤删除
Dec 27 #Python
python中使用%与.format格式化文本方法解析
Dec 27 #Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 #Python
You might like
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
laravel5.6实现数值转换
2019/10/23 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
Python中处理unchecked未捕获异常实例
2015/01/17 Python
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
台湾生鲜宅配:大口市集
2017/10/14 全球购物
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
实习生体会的自我评价范文
2013/11/28 职场文书
装修致歉信
2014/01/15 职场文书
捐书活动总结
2014/05/04 职场文书
市场营销战略计划书
2014/05/06 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
2015年银行员工工作总结
2015/04/24 职场文书