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


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

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

时间: 2024-11-10 12:10:51

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

汇编--常用汇编指令与标志位关系

加法指令 ADD (addition) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最高有效位向高位无进位 OF=1   两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反. OF=0   两个不同符号数相加,或同符号数相加,结果符号与其相同. 带进位加法指令 ADC (add with carry) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最低有效位相高位无进位 OF=1   两个同符号数相加,结果符号与其相反, O

Python之re(正则表达式)模块小结

这篇文章借鉴了一些其他文章和教程,介绍了python中re模块的一些规则和常用函数,不足之处希望指出,我也很希望能整理出一份很完美的小结. 一.正则表达式模式 模式字符串使用特殊的语法来表示一个正则表达式: 字母和数字表示他们自身.一个正则表达式模式中的字母和数字匹配同样的字符串. 多数字母和数字前加一个反斜杠时会拥有不同的含义. 标点符号只有被转义时才匹配自身,否则它们表示特殊的含义. 反斜杠本身需要使用反斜杠转义. 由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们.模式元素

如何解决python的re模块group、groups与findall遇见正则表达式中分组&quot;()&quot;后产生的”眩晕反应“

转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9244783.html 直接先上例子 >>> re.search('(book+)', 'mebookbookme').groups() ('book',) >>> re.search('(book+)', 'mebookbookme').group() 'book' >>> re.search('(book)+', 'mebookbookme').group

python常用模块(1):collections模块和re模块(正则表达式详解)

从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来说我们应该先解释模块概念性东西再来学习具体的模块使用.可是直接解释可能反而不好理解,模块的使用非常方便,所以我们采用先介绍使用常用模块过两天再具体进行模块概念的讲解. 预习: 实现能计算类似 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998

js正则表达式常用字符

啥是正则表达式? 一个正则表达式(regular expression)就是包含正常字符串和特殊元字符(meta characters)或元序列(meta sequences)的字符串.正常字符串匹配它们自己.元字符和元序列是字符或表示数量.位置或字符类型的字符序列. 这里只是记录一下学习过程,学习请转JS正则表达式详情 常用的正则字符 1.\ : 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 向后引用.或一个八进制转义符.例如,'n' 匹配字符 "n".'n' 匹配一个换行

常用模块之re模块以及正则表达式扩展

什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 使用python编写的代码(.py文件) 已被编译为共享库或DLL的C或C++扩展 包好一组模块的包 使用C编写并链接到python解释器的内置模块 为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方

常用的操作正则表达式的方法+正则表达式基本元字符使用实例

常用的操作正则表达式的方法: 下面学习一下位于System.Text.RegularExpressions下的Regex类的一些静态方法和委托(只要有一段匹配就会返回true) 1,静态方法IsMatch (返回值是一个布尔类型,用于判断指定的字符串是否与正则表达式字符串匹配,它有三个重载方法) bool IsMatch(string input, string pattern); 参数: input: 要搜索匹配项的字符串. pattern: 要匹配的正则表达式模式. 返回结果: 如果正则表达

Python re正则表达式模块学习【转】

感谢原作者,本文转自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 博主还有一些比较好的python文档在此一并推荐,可以移步查看. 文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whate

Python中re(正则表达式)模块函数学习

今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. 方法/属性 作用 match() 决定 RE 是否在字符串刚开始的位置匹配 search() 扫描字符串,找到这个 RE 匹配的位置 findall() 找到 RE 匹配的所有子串,并把它们作为一个列表返回 finditer() 找到 RE 匹配的所有子串,并把它们作为一个迭代器返回 match() 函数只检查 RE 是否在字符串开始处匹配