import re

phoneNumRegex=re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')

mo=phoneNumRegex.search('My number is 415-555-4242.')

print('Phone number found: '+mo.group())

#######利用括号分组##############

phoneNumRegex=re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')

mo=phoneNumRegex.search('My number is 415-555-4242.')

mo.group(1)

mo.group(2)

mo.group(0)

mo.group()

mo.groups()

areaCode,mainNumber=mo.groups()

areaCode

mainNumber

################用管道匹配多个分组#######################

heroRegex=re.compile(r'Batman|Tina Fey')

mo1=heroRegex.search('Batman and Tina Fey')

mo1.group()

mo2=heroRegex.search('Tina Fey and Batman')

mo2.group()

batRegex=re.compile(r'Bat(man|mobile|copter|bat)')

mo=batRegex.search('Batmobile lost a wheel')

mo.group()

mo.group(1)

################用问号实现可选匹配#######################

batRegex=re.compile(r'Bat(wo)?man')

mo1=batRegex.search('The Adventures of Batman')

mo1.group()

mo2=batRegex.search('The Adventures of Batwoman')

mo2.group()

phoneRegex=re.compile(r'(\d\d\d-)?\d\d\d-\d\d\d')

mo1=phoneRegex.search('My number is 415-555-4242')

mo1.group()

mo2=phoneRegex.search('My number is 555-4242')

mo2.group()

################用星号匹配零次或多次###################

batRegex=re.compile(r'Bat(wo)*man')

mo1=batRegex.search('The Adventures of Batman')

mo1.group()

mo2=batRegex.search('The Adventures of Batwoman')

mo2.group()

mo3=batRegex.search('The Adventures of Batwowowoman')

mo3.group()

################用加号匹配一次或多次###################

batRegex=re.compile(r'Bat(wo)+man')

mo1=batRegex.search('The Adventures of Batman')

mo1.group()

mo2=batRegex.search('The Adventures of Batwoman')

mo2.group()

mo3=batRegex.search('The Adventures of Batwowowoman')

mo3.group()

################用花括号匹配特定次数######################

haRegex=re.compile(r'(Ha){3}')

mo1=haRegex.search('HaHaHa')

mo1.group()

mo2=haRegex.search('Ha')

mo2==None

#################贪心和非贪心匹配####################################

##########正则表达式:贪心,在有二义的情况下,尽可能匹配最长的字符串###

greedyHaRegex=re.compile(r'(Ha){3,5}')

mo1=greedyHaRegex.search('HaHaHa')

mo1.group()

nongreedyHaRegex=re.compile(r'(Ha){3,5}?')

mo2=nongreedyHaRegex.search('HaHaHaHa')

mo2.group()

####################findall()方法###################################

###########包含被查找字符串中的所有匹配#############################

phoneNumRegex=re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')

phoneNumRegex.findall('Cell:415-555-9999 Work:215-555-0000')

###########################字符分类#################################

###\d  表示0到9的任何数字

###\D  表示除0到9的数字之外的任何字符

###\w  表示任何字母、数字或下划线字符(可以认为是匹配“单词”字符)

###\W  表示除字母、数字和下划线以外的任何字符

###\s  表示空格、制表符或换行符(可以认为是匹配“单词”字符)

###\S  表示除空格、制表符或换行符以外的任何字符

xmasRegex=re.compile(r'\d+\s\w+')

xmasRegex.findall('12 drummers,11 pipers,10 lords,9 ladies,8 maids,7 swans,6 geese,5 rings,4 birds,3 hens,2 doves,1 partridge')

#######################建立自己的字符分类###########################

vowelRegex=re.compile(r'[aeiouAEIOU]')

vowelRegex.findall('RoboCop eats baby food.BABY FOOD')

########################插入字符和美元字符###########################

#########^表明匹配必须发生在被查找文本开始处#########################

#########$表明该字符串必须匹配该模式结束#############################

###########################通配字符##################################

#########.(句点)字符被称为"通配符"###################################

atRegex=re.compile(r'.at')

atRegex.findall('The cat in the hat sat on the flat mat')

###########################用点-星匹配所有字符######################

######点-星(.*)表示"任意文本"(贪心模式:总是匹配尽可能多的文本)######

####点-星-问号表示“任意文本”(非贪心模式:总是匹配尽可能少的文本)####

nongreedyRegex=re.compile(r'<.*?>')

mo=nongreedyRegex.search('<To serve man> for dinner.>')

mo.group()

greedyRegex=re.compile(r'<.*>')

mo=greedyRegex.search('<To serve man> for dinner.>')

mo.group()

#######################################################################

###############点-星将匹配除换行以外的所有字符#########################

###############通过传入re.DOTALL作为re.compile()的第二个参数###########

###############可以让句点字符匹配所有字符,包括换行字符#################

#######################################################################

##############向re.compile()传入re.IGNORECASE或re.I,不区分大小写#######

#############用sub()方法替换字符串#####################################

namesRegex=re.compile(r'Agent \w+')

namesRegex.sub('CENSORED','Agent Alice gave the secret documents to Agent Bob.')

agentNamesRegex=re.compile(r'Agent (\w)\w*')

agentNamesRegex.sub(r'\1****','Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.')

####################管理复杂的正则表达式###############################

phoneRegex=re.compile(r'''(

(\d{3}|\(\d{3}\))?    #area code

(\s|-|\.)?            #separator

\d{3}                 #first 3 digits

(\s|-|\.)             #separator

\d{4}                 #last 4 digits

(\s*(ext|x|ext.)\s*\d{2,5})?  #extension

)''',re.VERBOSE)

#########################################################################

######################pyperclip模块复制和粘贴字符串######################

import pyperclip,re

####Create phone regex

phoneRegex=re.compile(r'''(

(\d{3}|\(\d{3}\))?    #area code

(\s|-|\.)?            #separator

\d{3}                 #first 3 digits

(\s|-|\.)             #separator

\d{4}                 #last 4 digits

(\s*(ext|x|ext.)\s*\d{2,5})?  #extension

)''',re.VERBOSE)

####Create email regex

emailRegex=re.compile(r'''(

[a-zA-Z0-9._%+-]+      #username

@                      #@ symbol

[s-zA-Z0-9.-]+         #domain name

(\.[a-zA-Z]{2,4})      #dot-something

)''',re.VERBOSE)

####Find matches in clipboard text.

text=str(pyperclip.paste())

matches=[]

for groups in phoneRegex.findall(text):

phoneNum = '-'.join([groups[1],groups[3],groups[5]])

if groups[8] !='':

phoneNum += ' x'+groups[8]

matches.append(phoneNum)

####Copy results to the clipboard.

if len(matches)>0:

pyperclip.copy('\n'.join(matches))

print('Copied to clipboard:')

print('\n'.join(matches))

else:

print('No phone numbers or email addresses found.')

###示例1:

##############################强口令检测###################

###################长度不少于8个字符#######################

###################同时包含大写和小写字符##################

###################至少有一位数字##########################

import re

def checkLength(pwd):

IfOrNot=len(pwd)

if IfOrNot>=8:

return True

else:

return False

def checkUpperLetter(pwd):

UpperLetter=re.compile(r'[A-Z]+')

mo=UpperLetter.search(pwd)

if mo:

return True

else:

return False

def checkLowerLetter(pwd):

LowerLetter=re.compile(r'[a-z]+')

mo=LowerLetter.search(pwd)

if mo:

return True

else:

return False

def checkNumLetter(pwd):

LowerLetter=re.compile(r'[0-9]+')

mo=LowerLetter.search(pwd)

if mo:

return True

else:

return False

def checkPassword(pwd):

return (checkLength(pwd) and checkUpperLetter(pwd) and checkLowerLetter(pwd) and checkNumLetter(pwd))

###示例2:

####正则表达式,匹配每3位就有一个逗号的数字?必须匹配以下数字:

.'42'

.'1,234'

.'6,368,745'

####但不会匹配:

.'12,34,567'

.'1234'

numRegex=re.compile(r'^\d{1,3}(,\d{3})*$')

mo=numRegex.search('12,304,567')

mo.group()

python自动化之正则的更多相关文章

  1. python自动化运维之路~DAY5

    python自动化运维之路~DAY5 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模块的分类 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数 ...

  2. python浅谈正则的常用方法

    python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...

  3. python匹配ip正则

    python匹配ip正则 #!/usr/bin/env python # -*- coding:utf-8 -*- import re ip_str = "asdad1.1.1.1sdfwe ...

  4. flow.ci + Github + Slack 一步步搭建 Python 自动化持续集成

    理想的程序员必须懒惰,永远追随自动化法则.Automating shapes smarter future. 在一个 Python 项目的开发过程中可能会做的事情:编译.手动或自动化测试.部署环境配置 ...

  5. Selenium2+python自动化23-富文本(自动发帖)

    前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...

  6. Selenium2+python自动化24-js处理富文本(带iframe)

    前言 上一篇Selenium2+python自动化23-富文本(自动发帖)解决了富文本上iframe问题,其实没什么特别之处,主要是iframe的切换,本篇讲解通过js的方法处理富文本上iframe的 ...

  7. Selenium2+python自动化7-xpath定位

    前言 在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到.这个时候就需要自己手动的去写xpath了,这一篇详细讲解xpath的一些语法. ...

  8. Selenium2+python自动化13-Alert

    不是所有的弹出框都叫alert,在使用alert方法前,先要识别出它到底是不是alert.先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决.alert\confirm\prompt弹出框 ...

  9. 【python自动化第十一篇】

    [python自动化第十一篇:] 课程简介 gevent协程 select/poll/epoll/异步IO/事件驱动 RabbitMQ队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...

随机推荐

  1. python之进程池与线程池

    一.进程池与线程池介绍 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 当并发的任务数远远超过了计算机的承受能力时,即无法一次性开启过多的进程数或线程数时就应该 ...

  2. java学习(一) 环境搭建、hello world的demo

    本程序媛搞前端的,上班偶有空闲,不妨来学习学习,不然怎么包养小白脸,走上人生巅峰? 说实话,每个语言都相通,有了javascript的基础,并且有了两三年跟java打交道的经验,简单学习下java想必 ...

  3. Spring入门学习笔记(4)——JDBC的使用

    目录 Spring JDBC框架概览 JdbcTemplate类 配置数据源 数据访问对象(Data Access Object,DAO) 执行SQL命令 Spring JDBC框架概览 使用传统的J ...

  4. Go入门指南

    第一部分:学习 Go 语言 第1章:Go 语言的起源,发展与普及 1.1 起源与发展 1.2 语言的主要特性与发展的环境和影响因素 第2章:安装与运行环境 2.1 平台与架构 2.2 Go 环境变量 ...

  5. UVA 816 Abbott's Revenge 紫书

    紫书的这道题, 作者说是很重要. 但看着题解好长, 加上那段时间有别的事, 磨了几天没有动手. 最后,这道题我打了五遍以上 ,有两次被BUG卡了,找了很久才找到. 思路紫书上有,就缺少输入和边界判断两 ...

  6. 2015第六届蓝桥杯C/C++ B组

    奖券数目:枚举 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其 ...

  7. NDK 链接第三方静态库的方法

    将NDK编译的第三方静态拷贝到JNI目录下,在Android.mk中添加如下代码 以openssl静态库(libcrypto-static.a)为例 第一种链接方法:LOCAL_LDFLAGS := ...

  8. gulp-babel 阻止了js文件编译的进程?

    现象 :   编译打包的js没有输出到目标文件夹里,只是单单的生成了一个目标目录,目录里没有文件 解决方法:gulp-babel ^8.0.0 使用了 ^7.0.1的 依赖插件.统一gulp-babe ...

  9. 《大象Think in UML》阅读笔记之二

    Think in UML阅读笔记(二) 上一次读到面向对象和面向过程的区别和各自的优势,结合实例分析了面向过程在面对大数据的时候,已经不足以满足人们的需求,所以引入了面向对象,面向对象的方法把世界看做 ...

  10. SpringMVC(一)-- springmvc的系统学习之配置方式

    资源:尚学堂  邹波 springmvc框架视频  一.springMVC 工作流程        页面请求---->控制器(Controller DispatcherServlet)----& ...