python自动化之正则

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python自动化之正则相关的知识,希望对你有一定的参考价值。

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自动化之正则的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式之Python编程

Python之面向对象和正则表达(代数运算和自动更正)

python自动化--模块操作之reMySQLExcel

自动化运维Python系列之Django路由系统Ajax请求

Appium-python-UI自动化之自动获取devicesd,version,package,appActivity

Python自动化开发从浅入深-语言基础(正则表达式)