Python中的正则表达式和示例

 

模块正则表达式(RE)指定与其匹配的一组字符串(模式)。
为了理解RE的类比,MetaCharacter是有用的,重要的,并且将在模块re的功能中使用。
一共有14个元字符,将在功能中进行讨论:

\用来掉落字符的特殊含义    跟随它(在下面讨论)[]代表角色类别^匹配开头$匹配结尾。匹配换行符以外的任何字符?匹配零个或一个匹配项。| 表示OR(与任何字符匹配    被它分开。*任意次数(包括0次)+一次或多次{}指示先前RE的出现次数     匹配。()附上一组RE

函数compile()将
正则表达式编译成模式对象,该对象具有用于各种操作的方法,例如搜索模式匹配或执行字符串替换。

import re   #compile()创建正则表达式字符类[a-e],#相当于[abcde]。#类[abcde]将与具有“a”、“b”、“c”、“d”、“e”的字符串匹配。p = re.compile('[a-e]')   # findall()搜索正则表达式,找到后返回一个列表print(p.findall("找到了"))

输出:

['e','a','d','b','e','a']

了解输出:
第一次出现是“ Aye”中的“ e”,而不是“ A”,因为它区分大小写。
下一个出现是“ said”中的“ a”,然后是“ said”中的“ d”,然后是“ Gibenson”中的“ b”和“ e”,最后一个“ a”与“ Stark”匹配。

元字符反斜杠“ \”具有非常重要的作用,因为它可以发出各种序列的信号。如果要使用反斜杠而不使用其特殊含义作为元字符,请使用'\\'

\d匹配任何十进制数字,这等效     到设置的类别[0-9]。\D匹配任何非数字字符。\s匹配任何空格字符。\S匹配任何非空白字符\w匹配任何字母数字字符,这是     等效于类[a-zA-Z0-9_]。\W匹配任何非字母数字字符。

设置类[\ s ,.]将匹配任何空格字符“,”或“”..

import re   # \d相当于[0-9]。p = re.compile('\d') print(p.findall("我在2020年7月9日上午11时去关注软件测试公众号"))   # \d+ 将匹配[0-9]上的组,组大小为一个或更大 p = re.compile('\d+') print(p.findall("我在2020年7月9日上午11时去关注软件测试公众号"))

输出:

['2', '0', '2', '0', '7', '9', '1', '1']['2020', '7', '9', '11']
import re   # \w 相当于[a-zA-Z0-9]p = re.compile('\w') print(p.findall("Official account: software testing test."))   # \w+ 与字母数字字符组匹配。p = re.compile('\w+') print(p.findall("Official account: software testing test."))   # \W 与非字母数字字符匹配。p = re.compile('\W') print(p.findall("Official account: software testing test."))

输出:

['O', 'f', 'f', 'i', 'c', 'i', 'a', 'l', 'a', 'c', 'c', 'o', 'u', 'n', 't', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', 't', 'e', 's', 't', 'i', 'n', 'g', 't', 'e', 's', 't']['Official', 'account', 'software', 'testing', 'test'][' ', ':', ' ', ' ', ' ', '.']

 

import re   # '*' 替换字符的出现次数。p = re.compile('ab*') print(p.findall("ababbaabbb"))

输出:

['ab','abb','a','abbb']

了解输出结果:

我们的RE为ab *,后接数字“ a”。'b'的值从0开始。
输出'ab'是有效的,因为单一的'b'伴随着单数'a'。输出“ abb”有效,因为单数为“ a”和2个为“ b”。输出“ a”有效,因为单数为“ a”并伴有0“ b”。输出“ abbb”有效,因为单数为“ a”并伴有3个“ b”。

函数split()
通过出现字符或模式来分割字符串,找到该模式后,字符串中的其余字符将作为结果列表的一部分返回。
语法 :

 re.split(pattern, string, maxsplit=0, flags=0)

第一个参数pattern表示正则表达式,string是将在其中搜索pattern并进行拆分的给定字符串,如果未提供maxsplit,则将其视为零“ 0”,如果提供任何非零值,则最多会发生许多分裂。如果maxsplit = 1,则字符串将仅拆分一次,从而产生一个长度为2的列表。这些标志非常有用,可以帮助缩短代码,它们不是必需的参数,例如:flags = re.IGNORECASE,在此拆分中,大小写将被忽略。

from re import split   # '\W+' 非字母数字字符或字符组# 在找到“,”或空格“”时,split()将从该点拆分字符串print(split('\W+', 'Software test, Software test, Software test')) print(split('\W+', "Software test"))   # 这里的“:”、“”、“、”不是字母数字,因此是发生拆分的点print(split('\W+', 'On 12th Jan 2016, at 11:02 AM'))   # '\d+' 表示数字字符或字符组# 拆分仅在“12”、“2020”、“11”、“02”发生print(split('\d+', '2020年1月12日上午11:02'))

输出:

['Software', 'test', 'Software', 'test', 'Software', 'test']['Software', 'test']['On', '12th', 'Jan', '2020', 'at', '11', '02', 'AM']['', '年', '月', '日上午', ':', '\u200b']

函数sub()
语法:

re.sub(pattern,repl,string,count = 0,flags=0)

函数中的“ sub”代表SubString,在给定的字符串(第3个参数)中搜索某个正则表达式模式,并在找到子字符串模式后将其替换为repl(第2个参数),计数检查并保持次数发生这种情况。

import re   # 正则表达式模式“te”匹配“testing”和“test”处的字符串。#由于忽略了大小写,因此使用标志“te”应与字符串匹配两次#匹配后,“testing”中的“te”替换为“~*”,在“test”中,替换“te”。print(re.sub('te', '~*' , 'Coldrain has focused on software testing test', flags = re.IGNORECASE))   # 考虑到大小写敏感度,“test”中的“te”将不会被重新调用。print(re.sub('te', '~*' , 'Coldrain has focused on software testing test'))   # 当最大值为1时,替换次数为1print(re.sub('te', '~*' , 'Coldrain has focused on software testing test', count=1, flags = re.IGNORECASE))

输出:

Coldrain has focused on software ~*sting ~*stColdrain has focused on software ~*sting ~*stColdrain has focused on software ~*sting test

函数subn()
语法:

 re.subn(pattern,repl,string,count = 0,flags= 0)

subn()在所有方面都类似于sub(),除了提供输出的方式外。它返回一个元组,其中包含替换和新字符串的总数,而不仅仅是字符串。

import re print(re.subn('te', '~*' , '雨寒已经关注了软件测试test')) t = re.subn('te', '~*' , '雨寒已经关注了软件测试test', flags = re.IGNORECASE) print(t) print(len(t))   # 这将产生与sub()相同的输出print(t[0])

输出:

('雨寒已经关注了软件测试~*st', 1)('雨寒已经关注了软件测试test', 0)2雨寒已经关注了软件测试test

函数escape()
语法:

re.escape(字符串)

返回所有非字母数字都加反斜杠的字符串,如果要匹配其中可能包含正则表达式元字符的任意文字字符串,此方法很有用。

import re # escape()返回每个非字母数字字符前带有反斜杠“\”的字符串# 仅在第一种情况下“”,不是字母数字# 在第二种情况下,“,插入符号“^”、“-”、“[]”、“\”不是字母数字print(re.escape("I'm still writing at 1 a.m")) print(re.escape("I Asked what is this [a-9], he said \t ^WoW"))

输出

I'm\ still\ writing\ at\ 1\ a\.mI\ Asked\ what\ is\ this\ \[a\-9\],\ he\ said\ \        \ \^WoW
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值