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. Apache Flink学习笔记

    Apache Flink学习笔记 简介 大数据的计算引擎分为4代 第一代:Hadoop承载的MapReduce.它将计算分为两个阶段,分别为Map和Reduce.对于上层应用来说,就要想办法去拆分算法 ...

  2. 斐讯K2 PSG1218 刷机教程 基于Breed互刷 清除配置

    Padavan官方论坛http://www.right.com.cn/forum/thread-161324-1-1.html Breed官方文档http://www.right.com.cn/for ...

  3. 将禅道部署到腾讯云linux 上

    部署环境 :linux(腾讯云),用到了 xshell   FileZilla 使用禅道集成环境lampp直接部署 1.首先下载 lampp j集成环境包.https://sourceforge.ne ...

  4. IOS测试-Fastmonkey

    目录: 一.背景 二.Fastmonkey介绍 三.Fastmonkey操作前准备 四.Fastmonkey工程配置过程 五.执行Monkey测试 六.FAQ Fastmonkey实践 一.背景: 因 ...

  5. Linux下出现permission denied的解决办法

    Linux下经常出现permission denied,原因是由于权限不足,有很多文章通过chmod命令更改权限为777,但是很不方便也不适合新手,简单粗暴的方法如下: 命令行中输入 sudo pas ...

  6. python-模拟掷骰子,两个筛子数据可视化

    """ 作者:zxj 功能:模拟掷骰子,两个筛子数据可视化 版本:3.0 日期:19/3/24 """ import random impo ...

  7. 【NLP】彻底搞懂BERT

    # 好久没更新博客了,有时候随手在本上写写,或者Evernote上记记,零零散散的笔记带来零零散散的记忆o(╥﹏╥)o..还是整理到博客上比较有整体性,也方便查阅~ 自google在2018年10月底 ...

  8. nodejs 中 module.exports 和 exports 的区别

    1. module应该是require方法中,上下文中的对象 2. exports对象应该是上下文中引用module.exports的新对象 3. exports.a = xxx 会将修改更新到mod ...

  9. userdel命令详解

    基础命令学习目录首页 原文链接:http://www.360doc.com/content/15/0814/14/2149364_491595091.shtml 命 令: userdel  功能说明: ...

  10. First Blood

    自我介绍 大家好!我的名字是戴俊涵,代号211606359,喜欢看电影和古风音乐,也是一个资深漫迷(让世界感受痛楚吧),喜欢的美食是牛排. 回想初衷 (1)回想一下你初入大学时对本专业的畅想 当初你是 ...