re正则表达式的使用
1、查找电话号码
#! coding=utf-8
import re
"""查找字符串中的文本"""
txt="your number is 415-555-4242,your name is yy,her number is 131-129-9909"
phoneNumRex=re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')#/d匹配一个数字
phoneNum=re.search(phoneNumRex,txt)
print (phoneNum.group())
结果:415-555-4242
只会匹配第一个电话号码
2、利用括号分组
#! coding=utf-8
import re
"""查找字符串中的文本"""
txt="your number is 415-555-4242,your name is yy,her number is 131-129-9909"
phoneNumRex=re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')#加上括号进行分组
phoneNum=re.search(phoneNumRex,txt)
print (phoneNum.group())
print (phoneNum.group(0))
print (phoneNum.group(1))
print (phoneNum.groups())#返回一个元祖
结果:
415-555-4242
415-555-4242
415
('415', '555-4242')
3、用管道匹配多个分组,如:r“a|b”将匹配字符a或b,如果a和b都出现,则第1次出现的匹配字符将作为返回对象
#! coding=utf-8
import re
"""查找字符串中的文本"""
txt="your number is 415-555-4242,your name is yy,her number is 13112999091"
phoneNumRex=re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)|[0-9]{11}')#匹配两种情况
phoneNum=re.search(phoneNumRex,txt)
print (phoneNum.group())
结果:415-555-4242
如果将txt中的13112999091放在415-55-4242前面,将首先匹配13112999091
#! coding=utf-8
import re
"""查找字符串中的文本"""
txt="your number is13112999091 ,your name is yy,her number is 415-555-4242"
phoneNumRex=re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)|[0-9]{11}')#匹配两种情况
phoneNum=re.search(phoneNumRex,txt)
print (phoneNum.group())
结果:13112999091
4、?号匹配前面的字符出现1次或0次
#! coding=utf-8
import re
"""查找字符串中的文本"""
txt="your number is13112999091 ,your name is zhang,her number is 415-555-4242"
phoneNumRex=re.compile(r'zhang(san)?')#匹配两种情况,zhang或zhangsan
phoneNum=re.search(phoneNumRex,txt)
print (phoneNum.group())
结果:zhang
5、*匹配前面出现字符的零次或多次
#! coding=utf-8
import re
"""查找字符串中的文本"""
txt="your number is13112999091 ,your name is zhang,her number is 415-555-4242"
phoneNumRex=re.compile(r'zhang(san)*')#匹配两种情况,zhang或zhangsan
phoneNum=re.search(phoneNumRex,txt)
print (phoneNum.group())
结果:zhang
6、+匹配前面出现字符的一次或多次,如:aa(bc)+将匹配aabc或aabcbc或aabcbcbc...
7、用花括号匹配特定次数,如:aa(bb){4}将匹配aabbbbbbbb
8、贪心匹配,(ab){3,5}表示可以匹配ab重复3或5次,但当查找的字符串为ababababab,匹配到的是ababababab,而不是ababab,原因是在有二义的情况下,会尽可能的匹配最长的字符串
例子:
#! coding=utf-8
import re
"""查找字符串中的文本"""
txt="ababababab"
phoneNumRex=re.compile(r"(ab){3,5}")
phoneNum=re.search(phoneNumRex,txt)
print (phoneNum.group())
结果:ababababab
如果在{3,5}后加上一个?,如:(ab){3,5}?则便成了非贪心模式,将匹配ababab
所以问号在正则表达式中可能有两种含义,一种是申明非贪心匹配,一种是匹配前面的字符出现1次或0次
9、findall()方法和search方法的区别
findall方法返回的一组字符串,包含所查找字符串中的所有匹配,而search返回的只包含了第一次出现的匹配的文本
findall返回的是一个字符串列表,而search返回的是一个Match对象
例子:
#! coding=utf-8
import re
"""查找字符串中的文本"""
txt="your number is 131-129-9909 ,your name is zhang,her number is 415-555-4242"
phoneNumRex=re.compile(r"\d\d\d-\d\d\d-\d\d\d\d")
phoneNum=re.findall(phoneNumRex,txt)
print (phoneNum)
结果:
['131-129-9909', '415-555-4242']
如果正则表达式中有分组,findall将返回元祖的列表,如下:
#! coding=utf-8
import re
"""查找字符串中的文本"""
txt="your number is 131-129-9909 ,your name is zhang,her number is 415-555-4242"
phoneNumRex=re.compile(r"(\d\d\d)-(\d\d\d-\d\d\d\d)")
phoneNum=re.findall(phoneNumRex,txt)
print (phoneNum)
结果:
[('131', '129-9909'), ('415', '555-4242')]
re正则表达式的使用的更多相关文章
- JS正则表达式常用总结
正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...
- Python高手之路【五】python基础之正则表达式
下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...
- C# 正则表达式大全
文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...
- C#基础篇 - 正则表达式入门
1.基本概念 正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符.及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串 ...
- JavaScript正则表达式,你真的知道?
一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- 【JS基础】正则表达式
正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...
- JavaScript 正则表达式语法
定义 JavaScript定义正则表达式有两种方法. 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); ...
- [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)
数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...
- JS中给正则表达式加变量
前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下. 一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...
随机推荐
- 注解@Transactional(rollbackFor = Exception.class) 的用法
由于业务需求要求,在一个Service的一个方法A中有一个for循环,每次循环里面的业务逻辑有可能发生异常,这个时候就需要将这个循环内的所有数据库操作给回滚掉,但是又不能影响到之前循环里数据的更改,并 ...
- MySql TIMEDIFF做计算之后,后台报Illegal hour value '24' for java.sql.Time type 问题
页面需要显示这种格式:31:01:20 但是后台Springboot会提示Illegal hour value '24' for java.sql.Time type in value '24:00: ...
- java委托
上文讲过观察者模式,尽管已经用了依赖倒转原则,但是"抽象通知者"还是依赖"抽象观察者",也就是说万一没有了抽象观察者这样的接口,通知的功能就完不成了.另一方面, ...
- springboot项目创建
1.在eclipse中创建springboot项目,右键找到New,然后找到Spring Starter Project, 如果menu中找不到Spring Starter Project就选择oth ...
- 1503.02531-Distilling the Knowledge in a Neural Network.md
原来交叉熵还有一个tempature,这个tempature有如下的定义: \[ q_i=\frac{e^{z_i/T}}{\sum_j{e^{z_j/T}}} \] 其中T就是tempature,一 ...
- 排序算法(Gif动图演示)
冒牌排序(BubbleSort) 冒泡排序是一种比较简单的排序算法,它循环走过需要排序的元素,依次比较相邻的两个元素,如果顺序错误就交换,直至没有元素交换,完成排序. 若对n个人进行排序,我们需要n- ...
- 史上最全最详细的环境搭建教程,行百里者手把手教你在windows下搭建Anaconda+pycharm+库文件(TensorFlow,numpy)环境搭建
我是在搭建TensorFlow开发环境的道路上走了很多弯路 掉了很多头发,为了让广大同学们不在受苦受累 下面我将手把手教你学习如特快速搭建python环境 快速导入numpy,PIL,pillow,等 ...
- 【SVN】关于提交代码时的问题
将项目上传到SVN弹出框提示One added/edited TODO item was found. Would you like to review it? 然后百度说这样解决: 造成这个原因是因 ...
- Ubuntu16.04 藍牙連上,但是聲音裏面找不到設備
解決辦法: 1. sudo apt-get install blueman bluez* 2. sudo vim /etc/pulse/default.pa 注釋掉下面的代碼: #.ifexists ...
- python note 15 正则表达式
# 正则表达式 只和字符串打交道 # 正则表达式的规则# 规则 字符串 从字符串中找到符合规则的内容 # 字符组 : [] 写在中括号中的内容,都出现在下面的某一个字符的位置上都是符合规则的 # [0 ...