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 相关文章推荐
python3编写C/S网络程序实例教程
Aug 25 Python
python中的五种异常处理机制介绍
Sep 02 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
python处理multipart/form-data的请求方法
Dec 26 Python
75条笑死人的知乎神回复,用60行代码就爬完了
May 06 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
Apr 30 Python
python不同系统中打开方法
Jun 23 Python
学会迭代器设计模式,帮你大幅提升python性能
Jan 03 Python
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
May 25 Python
Python制作一个随机抽奖小工具的实现
Jul 07 Python
python 闭包函数详细介绍
Apr 19 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
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
PHP 工厂模式使用方法
2010/05/18 PHP
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php DOS攻击实现代码(附如何防范)
2012/05/29 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
php对称加密算法示例
2014/05/07 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
PHP fopen函数用法实例讲解
2019/02/15 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
非常漂亮的JS代码经典广告
2007/10/21 Javascript
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
ExtJs使用总结(非常详细)
2012/03/22 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
Python实现AI换脸功能
2020/04/10 Python
Python 中如何写注释
2020/08/28 Python
python实现扫雷游戏的示例
2020/10/20 Python
Python 实现一个简单的web服务器
2021/01/03 Python
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
给妈妈洗脚活动方案
2014/08/16 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
2014年租房协议书范本
2014/10/30 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS