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实现的文本简单可逆加密算法示例
May 18 Python
linux下python使用sendmail发送邮件
May 22 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
在pycharm中设置显示行数的方法
Jan 16 Python
int在python中的含义以及用法
Jun 27 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
详解python解压压缩包的五种方法
Jul 05 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
tornado+celery的简单使用详解
Dec 21 Python
如何对python的字典进行排序
Jun 19 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
Python Socket编程详解
Apr 25 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
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
房屋租赁协议书
2014/04/10 职场文书
全国文明单位申报材料
2014/05/31 职场文书
电子商务求职信
2014/06/15 职场文书
成本会计实训报告
2014/11/05 职场文书
工作感想范文
2015/08/07 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript