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 ...
随机推荐
- Windows下查看自己电脑的网关mac以及手动获取新的地址
场景:正在上班时,工作电脑突然无法连接网络了.查看配置发现DNS服务器地址被分配到了192.168.1.1,瞬间懵了? 过程:(1)进入cmd.使用ipconfig /all查看网关地址; (2)使用 ...
- java高并发实战(一)——为什么需要并发
转自:https://blog.csdn.net/gududedabai/article/details/80813592
- nginx优化php-fpm优化 压力测试达到每分150万访问量webbench网站压力
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装:引用wget http: ...
- SQL 字段修改
1.修改字段名: alter table 表名 rename column A to B 2.修改字段类型: alter table 表名 alter column 字段名 type not null ...
- celery (二) task调用
调用 TASK 基础 task 的调用方式有三种: 类似普通函数的调用方式, 通过 __calling__ 调用 ,类似 function() 通过 apply_async() 调用,能接受较多的参数 ...
- sql server数据库文件的迁移(mdf&ldf文件)
mdf 源文件 ldf 日志文件 在服务器不同磁盘目录内做迁移.移动用户数据库文件的情况大致有下面一些: ① 没有设计规划好,贪图方便,,,,数据库文件和日志文件增长过快,导致存放数据库文件的磁盘空间 ...
- Form-encoded method must contain at least one @Field.
https://blog.csdn.net/liunian823/article/details/80290855 记得之前遇到过这个问题,并且记录笔记了,这次再翻笔记,却没有找到...搜索 了下. ...
- VS2010 LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
1嵌入清单问题 属性: 项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是“是”,改成“否”. 项目\属性\配置属性\链接器\清单文件\生成清单:原来是“是”,改成“否”. 2文件老旧: c ...
- 多线程同步synchornized、volatile、Atomic、CountDownLatch示例
synchronized关键字 锁对象.synchronized(this)和synchronized方法都是锁当前对象. import java.util.concurrent.TimeUnit; ...
- Vue的从入门到放弃
此贴仅记录vue学习路程中遇见的大大小小,形形色色的问题 1. vue自动打开浏览器配置: 当使用vue 脚手架搭建项目后启动npm run dev,会出现 但是不会自动打开浏览器的,这时候去con ...