首页 > 其他分享 >re模块 函数模式详解

re模块 函数模式详解

时间:2024-11-26 21:13:44浏览次数:6  
标签:regex 匹配 text cat re 详解 result 模块

re模块

python爬虫过程中,实现页面元素解析的方法很多,正则解析只是其中之一,常见的还有BeautifulSoup和lxml,它们都支持网页HTML元素解析,re模块提供了强大的正则表达式功能

re模块常用方法

  • compile(pattern,flags=0) :用于编译一个正则表达式字符串,生成一个re.pattern对象

    • 参数: pattern:正则表达式字符串,flags:可选标志,用于修改匹配行为(下面会详细讲解)
    pattern = re.compile(r'a.*e')
    
  • search(pattern,string,flag=0):搜索字符串中第一个匹配,返回一个匹配对象,否则返回None

    • 参数:pattern:正则表达式字符串或编译后的re.pattern对象,string:要搜索的字符串,flags:用于修改匹配行为(如 re.IGNORECASE、re.MULTILINE 等)
    • 返回值:返回一个re.Match对象或None
    result = re.search(r'\bcat\b', 'The cat sat on the mat')
    #输出<re.Match object; span=(4, 7), match='cat'> 接下来会解释
    
  • match(pattern,string,flags=0):从字符串的开头匹配,如果匹配成功返回一个匹配对象,否则返回None

    • 参数pattern:正则表达式字符串或编译后的re.Pattern 对象,string:要匹配的字符串,flags:可选的标志,用于修改匹配行为
    • 返回值:返回一个re.Match对象或None
    result = re.search(r'\bcat\b', 'The cat sat on the mat')
    
  • findall(pattern,string,flags=0):返回所有匹配的子串列表

    • 返回值:一个包含所有匹配子串的列表
    result = re.findall(r'\bcat\b', 'The cat sat on the cat mat')
    #输出['cat', 'cat']
    
  • finditer(pattern,string,flags=0) :返回一个迭代器,产生所有匹配的 Match对象

    • 返回值:一个迭代器,产生 re.Match 对象
    result = re.finditer(r'\bcat\b', 'The cat sat on the cat mat')
    for match in result:
        print(match)
    #<re.Match object; span=(4, 7), match='cat'>
    #<re.Match object; span=(19, 22), match='cat'>
    
  • sub(pattern,repl,string,count=0,flags=0):替换字符串中所有匹配的子串

    • 参数:repl:替换字符串或替换函数,count:可选参数,指定最大替换次数,默认为0(替换所有匹配)
    • 返回值:替换后的字符串
    result = re.sub(r'\bcat\b', 'dog', 'The cat sat on the cat mat')
    print(result)
    #The dog sat on the dog mat
    
  • split(pattern,string,maxsplit=0,flags=0) :根据匹配的字串分割字符串

    • 参数:maxsplit:可选参数,指定最大分割次数,默认为0(不限分割次数)
    • 返回值:一个包含分割结果的列表
    text = "The cat sat on the cat mat"
    result = re.split(r'\b', text)
    print(result)
    #['', 'The', ' ', 'cat', ' ', 'sat', ' ', 'on', ' ', 'the', ' ', 'cat', ' ', 'mat', '']
    

flags模式标志位

模式匹配支持多种模式标志,用于修改匹配模式行为

re.IGNORECASE或re.I

  • 忽略大小写匹配模式

  • eg:

    text = "The cat sat on the cat mat"
    regex = re.compile("CAT", re.IGNORECASE)
    result = regex.search(text)
    if result:
        print(result.group())
    else:
        print("not found")
    #output-> cat
    

re.MULTILINE或re.M

  • 多行模式,使 ^ 和 $ 匹配每行的开始和结束

  • eg:

    text = """first Line
    second Line2
    third Line3"""
    
    regex = re.compile(r'^\w+', re.MULTILINE)
    result = regex.findall(text)
    print(result)
    #output->['first', 'second', 'third']
    

re.DOTALL 或 re.S

  • 可以使得. 匹配包括换行符在内的所有字符

  • eg:

    text = "abc\ndef\nghi"
    
    regex = re.compile(r'.*', re.DOTALL)
    result = regex.findall(text)
    print(result)
    #output->['abc\ndef\nghi', '']
    
    

re.VERBOSE 或 re.X

  • 允许在正则表达式中使用注释和空白

  • eg:

    	text = "The cat sat on the mat"
    	
    	regex = re.compile(r"""
    	                \b #单词边界
    	                cat#匹配"cat"
    	                \b#单词边界
    	""", re.VERBOSE)
    	result = regex.findall(text)
    	print(result)
    #output->['cat']
    

内嵌模式标志

内嵌模式的功能与flags标志位的功能一致,与之不同的是使用内嵌模式标志和注释可以增强正则表达式的可读性和灵活性

常用的内嵌模式标志

  • (?i):忽略大小写

    eg:

    text = "hello world"
    
    regex = re.compile(r"(?#忽略大小写)(?i)HELLO WORLD")
    # (?#...) 是一个注释语法
    result = regex.match(text).group()
    print(result)
    
  • (?m):多行模式,使 ^ 和 $ 匹配每行的开始和结束,而不仅仅是整个字符串的开始和结束

    eg:

    text = """first Line
    second Line
    third Line"""
    
    regex = re.compile(r"(?#多行模式)(?m)^\w+")
    result = regex.findall(text)
    print(result)
    #output->['first', 'second', 'third']
    
  • (?s):点匹配所有字符模式

    eg:

    text = "abc\ndef\nghi"
    
    regex = re.compile(r"(?#.号匹配换行符在内的所有字符)(?s).*")
    result = regex.findall(text)
    print(result)
    #output->['abc\ndef\nghi', '']
    
  • (?x):允许注释和空白

    eg:

    text = "The cat sat on the mat"
    
    regex = re.compile(r"(?#允许注释)(?ix)\bCAT\b")
    # ix->忽略大小写的注释模式
    result = regex.findall(text)
    print(result)
    #output->['cat']
    

re.Match 对象

re.Match对象是re模块中的一个类,用于表示正则表达式匹配的结果,当使用re.search,re,matchre.finditer方法时,若找到了匹配项,这些方法就会返回一个re.Match对象

re.Match返回字段解释

当使用print打印re.Match对象通常会返回<re.Match object; span=(4, 7), match='cat'>这种类似的字段

  • <re.Match object;:该部分表示的这是一个re.Match对象
  • span=(4, 7):表示一个元组,表示的是匹配字串在原始字符串中起始索引和结束索引
  • match='cat’:match是一个字符串,表示实际匹配的字串

访问 re.Match 对象的属性

通过访问re.Match对象的属性,我们可以获取更多信息

  • group():返回匹配的子字符串,如match.group()返回’cat’
  • start():返回匹配字串在原始字符串的起始索引
  • end():返回匹配字串在原始字符串的结束索引
  • span():返回元组表示字串的起始与结束索引

标签:regex,匹配,text,cat,re,详解,result,模块
From: https://www.cnblogs.com/ihave2carryon/p/18570981

相关文章

  • [Whole Web] Vue design and React design
    VirtualDOMAdvantage:OneoftheadvantagesofthevirtualDOMiscross-platformrenderingabstraction.ThevirtualDOMcanconnecttodifferenthostenvironments,enablingoneframeworktorenderacrossmultipleplatforms.1.WhydidReactswitchfromt......
  • 【Autodesk Revit 2025下载与安装】
    1、安装包「Revit2025」:链接:https://pan.quark.cn/s/9342ceb1f179提取码:WmPW2、安装教程(建议关闭杀毒软件)1)       双击Setup.exe安装,弹窗安装对话框  2)       勾选‘我同意。。’,点击下一步  3)       选择软件安装路径,建议C盘之外进......
  • Nettt核心之Future与Promise
    在了解Future之前要明白线程同步和异步线程同步需要等待,线程异步无需等待Netty中的Future机制1,基于jdkFuture改造而来2,保留了同步获取结果的能力,也提供了异步的Listener机制Netty中的Future:Netty自己实现的Future继承了|DK的Future,新增了Listener机制,任务结束会回......
  • JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化
    目录JavaScript中通过Array.sort()实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)一、为什么要使用Array.sort()二、Array.sort()的使用与技巧1、基础语法2、返回值3、使用技巧三、Array.sort()的复杂用法与实际......
  • [CSS] initial vs unset vs revert
    /*initial:defaultvalueofthecssproperty,youdon'tneedtorememberwhat'sthedefaultvalueofeachcssproperty,justuseinitialshoulddothetrickunset:neitherusethedefaultvalueortheinheritvalue,butwedon'twanttore......
  • VMware加载的Ubuntu系统提示空间不足,使用 GParted调整大小。
    1、虚拟系统关机状态下,设置分区大小。VMware安装的虚拟机系统,编辑 2、使用GParted调整分区,首先安装: sudoapt-getinstallgparted4、运行gpartedsudogparted5、弹出窗口 未分配空间的磁盘有10G,sda5磁盘只剩下3.2G,把空闲的10G分配给sda5:首先选中挂载点,sda2,......
  • MacOS安装录播姬BililiveRecorder解决zsh:killed问题
    MacOS下安装mikufans录播姬BililiveRecorder遇到的问题安装1、下载官方位置:Mikufans录播姬MacOS选BililiveRecorder-CLI-osx-arm64.zip2、选好位置解压好运行下面的命令没有执行权限,可以使用chmod命令添加执行权限第二条执行时没问题就直接输出版本号,如果有问题提示zsh:k......
  • 【RAG 项目实战 07】替换 ConversationalRetrievalChain(单轮问答)
    【RAG项目实战07】替换ConversationalRetrievalChain(单轮问答)NLPGithub项目:NLP项目实践:fasterai/nlp-project-practice介绍:该仓库围绕着NLP任务模型的设计、训练、优化、部署和应用,分享大模型算法工程师的日常工作和实战经验AI藏经阁:https://gitee.com/fasterai......
  • Realtek网卡MAC刷新工具PG8168.exe Version:2.34.0.4使用说明
    本刷新工具虽然文件名叫PG8168.EXE,但不是只有RTL8168可用,是这一个系列的产品都可以使用。实验证明RTL8111也可以使用。用法:PG8168[/h][/?][/b][/cHexOffsetHexValue][/dNICNumber][/l][/r][/w][/v][/#NICNumber][/nodeidHexNODEID][/svidHexSVIDHexSMID][/uuidHe......
  • 北京泽元堂王世龙医生看诊号位预约方法详解
    王世龙,中医主治医师,在二十多年的临床工作中,运用中医理论,结合现代医学进展,在治疗慢性疾病和疑难杂症中的取得了良好的效果。北京王世龙医师二十多年来,医治了许多的病例以及临床经历的堆集,北京王世龙医师特别是在治疗植物神经紊乱、重症肌无力、特发性震颤、肌营养不良、渐冻症、......