博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python正则提取特定标签内的字符
阅读量:7113 次
发布时间:2019-06-28

本文共 717 字,大约阅读时间需要 2 分钟。

hot3.png

python 3.5.2

提取下面数据 多个组合

[BEGIN]

[b]*****[e]

[b]-------[e]

[b]XXX

DDD

FFF

[e]

[END]

类似这种数据,提取[BEGIN] 和 [END]中间的内容。

思想,两个标签之间任意字符串,且不含有结尾标签组合的结构。

如果中间有 结尾处的字符组合那就没戏了!

r'\[BEGIN\]([\s\S]([^D]|[^N]D|[^E]ND)*)\[END\]'

\[BEGIN\]  开头

([\s\S]([^D]|[^N]D|[^E]ND)*) 中间

[\s\S] 任意字符串 ([^D]|[^N]D|[^E]ND) 不含有END组合的  *  任意个

\[END\]  结尾处字符串

xx = """[BEGIN][L_B]111dsfasfa 黄s423333[L_E][END][BEGIN][L_B]222dsfas  23444[L_E][END]"""y = re.findall(r'\[BEGIN\]([\s\S]([^\]][^D]\]|[^N]D\]|[^E]ND\]|[^\[]END\])*)\[END\]', xx, re.M)print(y)

上面的内容比之前讲解的内容稍长 排除了 [END] 组合

但是可见 后标签越长 匹配串越长 效率越低

之后又经过改进 最终如下

r'\[BEGIN\]([\s\S.]*?)\[END\]'

([\s\S.]*?)  加上?号 不贪婪匹配 点放在 方括号内

基本上完美了。这应该是最终解决方案。

研究学习到了。

转载于:https://my.oschina.net/raddleoj/blog/810472

你可能感兴趣的文章
【JDK源码分析】String的存储区与不可变性
查看>>
git clone https协议问题
查看>>
大电容和小电容并联
查看>>
RabbitMQ(一):Windows下RabbitMQ安装
查看>>
Python中numpy.random.randn()与rand(),numpy.zeros、ones、eye
查看>>
2、使用rpm包安装grafana
查看>>
CS 2505 Computer Organization I C05: Pointers in C
查看>>
WHERE spras = sy-langu.这是什么意思
查看>>
cf 834 E. Ever-Hungry Krakozyabra
查看>>
JavaScript自学笔记一
查看>>
Linux FTP的安装与权限配置
查看>>
PHP代码规范(一)
查看>>
POJ1125 Stockbroker Grapevine(最短路径)
查看>>
Java类成员的访问权限
查看>>
课堂作业第三周
查看>>
telnet命令详解
查看>>
Android WindowManager实现悬浮窗效果 (一)——与当前Activity绑定
查看>>
Do not go gentle into that good night.
查看>>
版本控制-搭建git服务器
查看>>
线性代数与矩阵论 习题 1.2.2
查看>>