前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中的正则表达式和示例

Python中的正则表达式和示例

作者头像
用户7466307
发布2020-07-14 16:03:08
8300
发布2020-07-14 16:03:08
举报

是时候

关注

我们一波了

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

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

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

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

输出:

代码语言:javascript
复制
['e','a','d','b','e','a']

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

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

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

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

代码语言:javascript
复制
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时去关注软件测试公众号"))

输出:

代码语言:javascript
复制
['2', '0', '2', '0', '7', '9', '1', '1']
['2020', '7', '9', '11']
代码语言:javascript
复制
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."))

输出:

代码语言:javascript
复制
['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']
[' ', ':', ' ', ' ', ' ', '.']
代码语言:javascript
复制
import re 
  
# '*' 替换字符的出现次数。
p = re.compile('ab*') 
print(p.findall("ababbaabbb"))

输出:

代码语言:javascript
复制
['ab','abb','a','abbb']

了解输出结果:

代码语言:javascript
复制
我们的RE为ab *,后接数字“ a”。'b'的值从0开始。

输出'ab'是有效的,因为单一的'b'伴随着单数'a'。
输出“ abb”有效,因为单数为“ a”和2个为“ b”。
输出“ a”有效,因为单数为“ a”并伴有0“ b”。
输出“ abbb”有效,因为单数为“ a”并伴有3个“ b”。

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

代码语言:javascript
复制
 re.split(pattern, string, maxsplit=0, flags=0)

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

代码语言:javascript
复制
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'))

输出:

代码语言:javascript
复制
['Software', 'test', 'Software', 'test', 'Software', 'test']
['Software', 'test']
['On', '12th', 'Jan', '2020', 'at', '11', '02', 'AM']
['', '年', '月', '日上午', ':', '\u200b']

函数sub() 语法:

代码语言:javascript
复制
re.sub(pattern,repl,string,count = 0,flags=0)

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

代码语言:javascript
复制
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时,替换次数为1
print(re.sub('te', '~*' , 'Coldrain has focused on software testing test', count=1, flags = re.IGNORECASE))

输出:

代码语言:javascript
复制
Coldrain has focused on software ~*sting ~*st
Coldrain has focused on software ~*sting ~*st
Coldrain has focused on software ~*sting test

函数subn() 语法:

代码语言:javascript
复制
 re.subn(pattern,repl,string,count = 0,flags= 0)

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

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

输出:

代码语言:javascript
复制
('雨寒已经关注了软件测试~*st', 1)
('雨寒已经关注了软件测试test', 0)
2
雨寒已经关注了软件测试test

函数escape() 语法:

代码语言:javascript
复制
re.escape(字符串)

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

代码语言:javascript
复制
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"))

输出

代码语言:javascript
复制
I'm\ still\ writing\ at\ 1\ a\.m
I\ Asked\ what\ is\ this\ \[a\-9\],\ he\ said\ \        \ \^WoW
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试test 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档