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正则表达式的使用的更多相关文章

  1. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  2. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

  3. C# 正则表达式大全

    文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...

  4. C#基础篇 - 正则表达式入门

    1.基本概念 正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符.及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串 ...

  5. JavaScript正则表达式,你真的知道?

    一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...

  6. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

  7. 【JS基础】正则表达式

    正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...

  8. JavaScript 正则表达式语法

    定义 JavaScript定义正则表达式有两种方法. 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); ...

  9. [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)

    数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...

  10. JS中给正则表达式加变量

    前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下.   一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...

随机推荐

  1. 云栖大会day2 下午

    下午内容普遍比较水 参与了intel的宣讲会,都能把人听睡着了 又回来听了开发者宣讲会 讲了人的成才选择,造势之人 顺势之人 逐流之人 我认为,跟人的能力关联不大,跟眼界关联很大, flink 参与到 ...

  2. oracle数据库用户删除及表空间删除

    以system用户登录,查找需要删除的用户: --查找用户 select  * from dba_users; --查找工作空间的路径select * from dba_data_files; --删 ...

  3. C 语言 字符串命令 strstr()的用法 实现将原字符串以分割串分割输出

    C 语言 字符串命令 strstr()的用法 实现将原字符串以分割串分割输出 strstr() 命令是在原字符串中查找指定的字符串第一次出现的地址,用这个特性可以实现字符的分割,判断是否包涵等功能: ...

  4. Models中字段的参数

    (1)null 如果为True,Django 将用NULL 来在数据库中存储空值. 默认值是 False. (1)blank 如果为True,该字段允许不填.默认为False. 要注意,这与 null ...

  5. PYTHON基础-入门

    变量名可以是数字,字母,下划线,字母不能开头.

  6. webapi+ajax跨域问题及cookie设置

    最近小玩了点东西,发现简单的东西总能遇到点问题 1.webapi跨域设置 [EnableCors(origins: "*", headers: "*", met ...

  7. HATEOAS 约束

    HATEOAS 约束 HATEOAS(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 REST 服务的核 ...

  8. [转] ADO.NET调用存储过程带输出参数或返回值

    CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(), @studentname nvarchar() OUTPUT AS BEGIN S ...

  9. mysql访问视图提示:找不到视图

    原因: 1.不存在 2.视图区分大小写(有的不区分) 3.权限问题

  10. 使用Dockerfile自定义一个包含centos,tomcat的镜像

    1.首先建立一个专用的dockerfile目录,方便统一存放将要创建的Dockerfile文件及相关资源, 例如:mkdir mydockerself 2.定位到mydockerself路径下,下载l ...