码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式模块re:正则表达式常用字符、常用可选标志位、group与groups、match、search、sub、findall、compile、

时间:2018-02-07 19:36:09      阅读:380      评论:0      收藏:0      [点我收藏+]

标签:[]   中间   class   isp   忽略   .com   模式   display   none   


re:

  • 介绍:关于正则表达式的模块
  • 正则表达式字符:
匹配*号前的字符0次或多次
  意义 例子【#后面代表结果】
. .代表匹配一个任意字符,\n除外 技术分享图片
^ ^后面的字符串必须是待匹配字符串的开头,否则找不到 技术分享图片

$

$前面的字符串必须是待匹配字符串的结尾,否则找不到 技术分享图片
\d 可以匹配一个数字 技术分享图片
\D 匹配非数字 技术分享图片
\s 可以匹配一个空白字符(空格,缩进符、\n,\r) 技术分享图片
     
可以用+、?、*来选择匹配次数    
+ 代表匹配前一个字符一次或多次,贪婪的 技术分享图片
 
? 代表匹配前一个字符0次或1次,不贪婪的 技术分享图片
* 匹配*号前的字符0次或多次,贪婪的, 技术分享图片
     
可以用 []表示范围 注:范围自己定,用-来代表,如可以有[0-9]、[1-9]、[1-6]等  
[a-z] 代表匹配范围是a-z 技术分享图片
[0-9] 代表匹配范围是0-9 技术分享图片
也可以多个范围:
[a-zA-Z0-9]
代表匹配字母或数字 技术分享图片
     
或:| 用在两个中间,代表匹配|左或|右的字符,如  A|B 代表可以匹配A或B 技术分享图片
     
可以用{m}来表示匹配次数    
{n} 代表匹配n次前一个字符 技术分享图片
{n,} 代表匹配n次或更多次前一个字符 技术分享图片
{n,m} 代表匹配前一个字符n到m次 技术分享图片
     
可以用(...)来表示分组匹配 代表将()里面的当成一整块来匹配,可以用于一组组数据的情况 技术分享图片
     
     
     

 

更多:https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin


常用可选标志位:

re.S:    使 . 匹配包括换行在内的所有字符

技术分享图片

re.I:        匹配忽略大小写

技术分享图片

如果想同时使用多个标志位,需要使用|:

技术分享图片

 


group与groups:

match和search匹配的返回结果都是对象,如果要获取对应字符串,需要使用group(num) 或 groups() :

技术分享图片

group(num=0):

直接调用则返回整个匹配结果,

如果group里面有参数:group(0)代表整个匹配结果,group(1) 列出第一个分组匹配部分,group(2) 列出第二个分组匹配部分,group(3) 列出第三个分组匹配部分,以此类推。

技术分享图片

groups()

以元组返回所有分组匹配的字符

技术分享图片
 

附加:

  •  start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;
  • end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;
  • span([group]) 方法返回 (start(group), end(group))
 

re.match(pattern, string, flags=0):

功能:re.match 从头开始匹配,如果字符串开头不匹配,那么返回None【如果匹配模式是】

参数介绍:

  • pattern:匹配的正则表达式
  • string:要匹配的字符串。
  • flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

技术分享图片

 

re.search(pattern, string, flags=0):

功能:re.search 搜索整个字符串,返回第一个匹配结果
参数介绍:

pattern:匹配的正则表达式

string:要匹配的字符串。

flags:标志位,用于控制正则表达式的匹配方式

技术分享图片

 


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

功能:re.sub      用于替换字符串中的匹配项,可指定替换个数

参数介绍:

pattern : 正则中的模式字符串。

repl : 替换的字符串,也可为一个函数。

string : 要被查找替换的原始字符串。

count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

用法:

import re

print(re.sub("abc","ABC","123abc123"))#123ABC123
print(re.sub("abc","ABC","123abc123abc123abc",2))#123ABC123ABC123abc
print(re.sub("abc","ABC","123abc123abc123abc",2))#123ABC123ABC123abc

def func(x):
    x=int(x.group())+1
    return str(x)

print(re.sub("123",lambda x:str(int(x.group())+1),"123abc123"))#124abc124
print(re.sub("123",func,"123abc123"))#124abc124

 

 

 

re.findall(string[, pos[, endpos]]):

功能:re.findall 搜索整个字符串,把所有匹配到的字符串以列表中的元素返回

参数介绍:

  • string : 待匹配的字符串。
  • pos : 可选参数,指定字符串的起始位置,默认为 0。
  • endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。

用法:

技术分享图片

 

re.compile 函数

  • compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象
  • 注:只能由 match() 和 search() 这两个函数使用。

技术分享图片


import re

print(".".center(50,-))
print(re.match(".","abc"))#<_sre.SRE_Match object; span=(0, 1), match=‘a‘>
print(re.match(".","abc").group())# a
print(re.match(".","abc").groups())# a

print("+".center(50,-))
print(re.match("a+","aaaa").group())#aaaa

print("?".center(50,-))
print(re.match("a?","aaaa").group())#a

print("*".center(50,-))
print(re.match("a*","aaaa").group())#aaaa


print("^".center(50,-))
print(re.search("^a.b","acbd").group())#acb
print(re.match("^a.+","abc").group())
print(re.search("^a.b","123acbd"))#这样找不到

print(re.search("a.+d$","acbd").group())#acbd
print(re.search("a.+d$","acbdc"))#这样找不到
print("".center(50,-))


print("\d".center(50,-))
print(re.match("\d","123456").group())#1
print(re.match("\d+","123456").group())#123456

print("\D".center(50,-))
print(re.search("\D","123456b").group())#b
print(re.search("\D","a123456").group())#a

print("\s".center(50,-))
print(re.search("a\sb","123a b456").group())#a b


print("[]".center(50,-))
print(re.search("[a-z]+","abcdefg").group())#abcdefg
print(re.search("[a-k]+","abczefg").group())#abc

print(re.search("[0-9]+","123456").group())#123456
print(re.search("[0-4]+","123456").group())#1234

print(re.search("[a-zA-Z0-9]+","1a2bC456ef").group())#1a2bC456ef

print("".center(50,-))
print(re.search("[a-z]+|[A-Z]+","1ab2bC4ef").group())#ab
print(re.search("([a-z]|[A-Z])+","1ab2bC4ef").group())#ab


print("{n}{n,m}".center(50,-))
print(re.search("[a-z]{3}","1ab2bC4efg").group())#efg
print(re.search("[a-z]{2,3}","1ab2bC4efg").group())#ab
print(re.search("[a-z]{2,3}","1a2C4efg").group())#efg
print(re.search("[a-z]{2,}","1a2C4efgaaaa").group())#efgaaaa


print("分组匹配".center(50,-))

print(re.search("([a-z]|[A-Z])+","1ab2bC4ef").group())#ab
print(re.search("([a-z]|[A-Z])+","1ab2bC4ef").group())#ab


print("group groups".center(50,-))
print(re.search("(\d[a-z]\d){3}","1x11a32a465").group())#1x11a32a4
print(re.search("(abc){3}","abcabcabc123").group())#abcabcabc
print(re.search("(abc)","abcabcabc123").groups())#(‘abc‘,)
m=re.search("(abc)(cba)(def)","abccbadef123")
print(m.groups())#(‘abc‘, ‘cba‘, ‘def‘)
print(m.group(0))#abccbadef
print(m.group(1))#abc
print(m.group(2))#cba

print("findall".center(50,-))
print(re.findall("(abc)","abcabcabc123"))#[‘abc‘, ‘abc‘, ‘abc‘]



print("flag".center(50,-))

print(re.search("a.b","a\nb",re.S).group())#分两行打印的 a b

print(re.search("a.b","A\nb",re.S|re.I).group())#分两行打印的 A b

print(re.search("ab","Ab",re.I).group())#Ab

正则表达式模块re:正则表达式常用字符、常用可选标志位、group与groups、match、search、sub、findall、compile、

标签:[]   中间   class   isp   忽略   .com   模式   display   none   

原文地址:https://www.cnblogs.com/progor/p/8427600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!