美文网首页
正则表达式高级使用

正则表达式高级使用

作者: 好多可乐 | 来源:发表于2019-02-14 00:33 被阅读0次

一,贪婪与非贪婪

贪婪:尽可能多的匹配

非贪婪:尽可能少的匹配

非贪婪符可以用在*,?,+的后面

*?  重复1次

??  重复0次

+?  重复0次

代码如下:

s ="greedyaiiii"

reg1 ="greedyai*"  # 贪婪

print(re.findall(reg1, s))   # 非贪婪

reg2 ="greedyai*?"

print(re.findall(reg2, s))

运行结果为:

['greedyaiiii']

['greedya']

二,分支条件匹配

关键词:" | "

代码如下:

s ="my phone num=010-11111111 0599-2222222 020-2222222"

reg3 ="0\d{2}-\d{8}|0\d{3}-\d{7}|0\d{2}-\d{7}"

print(re.findall(reg3, s))

运行结果为:

['010-11111111', '0599-2222222', '020-2222222']

捕捉与非捕捉(?:)

含义:

非捕捉:不破坏正则表达式的整体性,匹配全部

捕捉:捕捉连续符合正则表达式组内的最后一个组的内容

-------------------------------------------------------------------------------

现在我们有个需求,需要匹配IP地址

正常情况下,我们这么写可以匹配出来

ip ="address code: 128.0.0.1   125.125.125.125     0.0.0.0"

reg4 ="(\d{1,3}\.){3}\d{1,3}"

print(re.findall(reg4, ip))

但是,这里实际的运行结果为 ['0.', '125.', '0.']

原因是当分组时,会自动匹配捕捉模式,捕捉是是连续符合正则表达式组内的最后一个组的内容,所以这边匹配的就是每组的第三个

这个时候我们需要用到不捕捉,关键字就是 ?:

ip = "address code: 128.0.0.1 125.125.125.125 0.0.0.0"

reg4 = "(?:\d{1,3}\.){3}\d{1,3}"

print(re.findall(reg4, ip))

这样得出的结果就是:['128.0.0.1', '125.125.125.125', '0.0.0.0']

还有个例子如下:

address ="http://www.baidu.com"

reg5 ="http://(?:w){3}\.[a-z]*\.com"

print(re.findall(reg5, address))

零宽断言

(?=reg) 匹配reg前面的内容

(?<=reg)  匹配reg后面的内容

(?!reg)  匹配后面跟的不是reg的内容

(?<!reg)  匹配前面不是reg的内容

例子如下:

s1 ="hellogreedyailove"

reg6 ="hel{2}o(?=greedyai)"

print(re.findall(reg6, s1))

这里匹配的就是greedyai前面的内容,故结果就是hello

reg7="(?<=greedyai)[a-z]*"

print(re.findall(reg7, s1))

这里匹配的就是greedyai后面的内容,故结果就是hello

reg8="lo(?!greedyai)"

print(re.findall(reg8, s1))        

这里返回的是love里面的lo,因为匹配的是后面跟着的不是greedyai的内容,前面hello里的lo后接greedyai

reg9 ="(?

print(re.findall(reg9, s1)) 

 返回的是hello的2个l,因为这里返回的是l前面不是greedyai的内容,那love里的l就被排除了

相关文章

  • Python 学习笔记 060

    正则表达式 02 正则表达式 的高级用法 字符串的高级使用 正则表达式中的重复 匹配多个字符串 通过正则表达式 匹...

  • shell脚本(4)让文本飞

    目录1、通配符与正则表达式2、grep命令3、使用sed进行文本替换4、使用awk进行高级文本处理 1、通配符与正...

  • 正则表达式高级使用

    一,贪婪与非贪婪 贪婪:尽可能多的匹配 非贪婪:尽可能少的匹配 非贪婪符可以用在*,?,+的后面 *? 重复1次 ...

  • js高级(四)

    JavaScript高级第04天笔记 1.正则表达式概述 1.1什么是正则表达式 正则表达式( Regular E...

  • TCL 常用命令

    TCL 文件测试: 文件路径、文件名 split 命令: 正则表达式: regexp 命令: 高级正则表达式:

  • 正则表达式高级

    正则表达式高级——《精通正则表达式》+Java/Go/Python官方文档+多年经验+实验结果知识整理 [TOC]...

  • 手把手带你实现Markdown编辑器语法高亮

    源代码:ZYMarkdownEditor 什么是正则表达式? iOS开发如何使用正则表达式? 使用正则表达式匹配M...

  • QTP10-04-专家视图及VBS-参数化高级(DataTabl

    专家视图(Expert View) (VBS语法1) 参数化高级(Datable的高级操作) 正则表达式 字符串操...

  • 怎样在Swift中使用正则表达式

    怎样在Swift中使用正则表达式 怎样在Swift中使用正则表达式

  • iOS-正则表达式使用

    正则表达式与NSPredicate连用 正则表达式类 分组的使用 相关资料 常用正则表达式

网友评论

      本文标题:正则表达式高级使用

      本文链接:https://www.haomeiwen.com/subject/afxseqtx.html