正则表达式的条件与分组的探索——基于python
来源:互联网 发布:怎么联系手机淘宝客服 编辑:程序博客网 时间:2024/06/06 18:48
本文是关于条件和分组的探索内容,将会在以后新的探索后进行更新,欢迎关注
一、基本符号
分组:()
分组命名:(?P<name> rexp) 将 rexp 匹配的字符串作为分组 name
条件:(?(name)Y|N) 当存在分组 name 时,执行 Y 匹配,否则执行 N, "|N" 可以省略
二、关于分组命名
先看输入
caseStr = r''' 1-test fire 2:joker_there 75-just fine 66:all_right'''
有两种格式:“数字 -” , “数字:”; “数字 -” 匹配带空格的字符串, “数字:”匹配不带空格的字符串
我们以 (?P<ix1>\b\d+\-.*) 来匹配 “数字 -” 这样的模式,并将组名命名为 ix1,得到的输出为
['1-', '75-']
表示分别将 '1-' 和 '75-' 命名为 ix1 的组
这里看不出来分组命名的作用,我们往后面走
三、关于条件
现在,我们有了 ix1 分组,我们用他进行条件判断,正则表达式为
(?P<ix1>\b\d+\-)(?(ix1)([^\n]+))
后面这段 (?(ix1)([^\n]+)) 表示当匹配 ix1 成功后,从 ix1 后面继续匹配得到的结果,于是得到以下结果
[('1-', 'test fire'), ('75-', 'just fine')]
四、应用
那么现在需要想办法达到我们的目的了:“数字 -” 匹配带空格的字符串, “数字:”匹配不带空格的字符串
这里引入另外一个好用的扩展表达式,非捕获
(?:rexp)
表示匹配 rexp 表达式的字符串,但是不返回匹配内容
于是,我们最终的解决思路出来了
mStr = r'''
(?:
(?P<ix1>\b\d+\-)
(?(ix1)([^\n]+))
)
|
(?:
(?P<ix2>\b\d+\:)
(?(ix2)(\w+))
)
'''
返回结果如下
[('1-', 'test fire', '', ''), ('', '', '2:', 'joker_there'), ('75-', 'just fine', '', ''), ('', '', '66:', 'all_right')]
如果没有非捕获,返回的结果如下,会将该组内容返回
[('1-test fire', '1-', 'test fire', '', '', ''), ('', '', '', '2:joker_there', '2:', 'joker_there'), ('75-just fine', '75-', 'just fine', '', '', ''), ('', '', '', '66:all_right', '66:', 'all_right')]
由于非捕获不能和分组命名/条件嵌套,所以,这已经是博主能想到的最好的方式了
如果有读者能够消除多余字符串的返回(直接通过正则表达式达成),欢迎在评论区留言
五、附源码
#-*-coding:utf8;-*-import recaseStr = r'''1-test fire2:joker_there75-just fine66:all_right'''print caseStrmStr = r'''(?: (?P<ix1>\b\d+\-) (?(ix1)([^\n]+)))|(?: (?P<ix2>\b\d+\:) (?(ix2)(\w+)))'''res = re.findall(mStr, caseStr, re.VERBOSE)print res
- 正则表达式的条件与分组的探索——基于python
- python正则表达式——分组的使用
- 正则表达式-分支条件与分组
- [Python]正则表达式(...)分组的扩展示例
- 正则表达式的分组
- 正则表达式—分组与引用
- 基于遗传算法的正则表达式分组算法
- python正则表达式分组
- python里使用正则表达式的分组命名方式
- java正则表达式的分组
- 基于python的正则表达式学习笔记
- Python正则表达式学习(2)——字符集 [] 与 分组(capture group) ()
- 正则表达式——分组
- Java正则表达式——分组与捕获
- Java正则表达式——分组与捕获
- Java正则表达式——分组与捕获
- Java正则表达式——分组与捕获
- javascript正则表达式(3)——贪婪模式与分组
- IE11版本找不到控件元素的问题解决方法
- WARN: Establishing SSL connection without server's identity verification is not recommended.
- web前端面试题目
- [cvpr2017]Learning an Invariant Hilbert Space for Domain Adaptation
- 作业
- 正则表达式的条件与分组的探索——基于python
- Notification
- Length of Last Word leetocde java
- stm32 spi从模式配置解答
- 测试小故事42:假数据
- Android第一天
- Palindrome Number
- myeclipse2015 mac 序列号生成网址
- react-native利用codepush实现热更新