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 matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 Python
tensorflow识别自己手写数字
Mar 14 Python
Python3随机漫步生成数据并绘制
Aug 27 Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
Flask 上传自定义头像的实例详解
Jan 09 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
python与js主要区别点总结
Sep 13 Python
Python自动化之批量处理工作簿和工作表
Jun 03 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
php数组函数序列之in_array() - 查找数组中是否存在指定值
2011/11/07 PHP
PHP实现文件下载详解
2014/11/27 PHP
php判断文件上传类型及过滤不安全数据的方法
2014/12/17 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
用于table内容排序
2006/07/21 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
原生JS实现留言板功能
2020/02/08 Javascript
Vue实现移动端拖拽交换位置
2020/07/29 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
理解JavaScript中的对象
2020/08/25 Javascript
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
python版本五子棋的实现代码
2018/12/11 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
GAP美国官网:美国休闲时尚品牌
2016/08/26 全球购物
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
Linux常见面试题
2016/10/04 面试题
骨干教师培训制度
2014/01/13 职场文书
家长对小学生的评语
2014/01/28 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
2016秋季运动会前导词
2015/11/25 职场文书