如何使用Python正则表达式解析多行文本

news2024/9/24 15:22:48

使用 Python 的正则表达式来解析多行文本通常涉及到使用多行模式(re.MULTILINE)和 re.DOTALL 标志,以及适当的正则表达式模式来匹配你想要提取或处理的文本块。以下是一个简单的示例,展示了如何处理多行文本:

在这里插入图片描述

1、问题背景

有人编写了一个简单的Python脚本来解析文本文件,但正则表达式需要修改以便在第二个组中找到多行文本。以下是脚本代码:

import re


if __name__ == '__main__':
    sonnik = open('sonnik.txt').read().decode('utf-8')
    article = re.compile(ur'^([A-Za-zА-Яа-я0-9_\-:,\.«» ]+)[\n]{2}^[ ]{5}([A-Za-zА-Яа-я0-9_\-:,\.«» ]+)$',re.M|re.U)
    result = article.findall(sonnik)
    print len(result)

    print '-----'
    print result[0][1].decode('utf-8')
    print '-----'

文本文件的示例如下:

Банкет

     Видеть во сне банкет - хорошо. Друзья будут к Вам благосклонны. Видеть во сне себя в толпе веселых, нарядно одетых гостей, которые едят на дорогой посуде и пьют старые вина баснословной стоимости, предвещает огромную удачу в любых начинаниях и счастье в кругу друзей.
     Видеть недружелюбие среди гостей, нелепые пустые столы - является знаком очень тяжелых недоразумений, размолвок и разочарований, ожидающих Вас.

Банкрот

     Если Вам снится сон, в котором Вы не можете расплатиться с долгами и чувствуете себя банкротом - то в реальной жизни не бойтесь угрозы с этой стороны. Напротив, Ваша энергия и уверенность в себе позволяет Вам наилучшим образом организовать свои дела.
     Однако иные тревоги могут смутить Вашу душу.
     Если Вы видите банкротами других, то это означает, что наяву Вам встретятся люди благородные, честные в делах, хотя, возможно, излишней откровенностью они могут Вам навредить.
     Молодой особе этот сон обещает небольшую размолвку с любимым, виной чему разность их взглядов.

问题是,当前的正则表达式只能匹配文本的第一行。

2、解决方案

为了修改正则表达式以找到多行文本,可以添加以下表达式:

(?:\n^[ ]{5}[A-Za-zА-Яа-я0-9_\-:,\.«» ]+)*

之后,正则表达式的最终形式如下:

^([A-Za-zА-Яа-я0-9_\-:,\.«» ]+)\n{2}^[ ]{5}([A-Za-zА-Яа-я0-9_\-:,\.«» ]+(?:\n^[ ]{5}[A-Za-zА-Яа-я0-9_\-:,\.«» ]+)*)$

这个正则表达式将匹配以新行和五个空格开头的多行文本。

以下是如何使用修改后的正则表达式来解析文本文件的示例:

import re


if __name__ == '__main__':
    sonnik = open('sonnik.txt').read().decode('utf-8')
    article = re.compile(ur'^([A-Za-zА-Яа-я0-9_\-:,\.«» ]+)\n{2}^[ ]{5}([A-Za-zА-Яа-я0-9_\-:,\.«» ]+(?:\n^[ ]{5}[A-Za-zА-Яа-я0-9_\-:,\.«» ]+)*)$',re.M|re.U)
    result = article.findall(sonnik)
    print len(result)

    print '-----'
    print result[0][1].decode('utf-8')
    print '-----'

这个脚本将打印出解析出的文本对列表,以及第一个文本对的第二组文本内容。

这只是一个简单的示例,你可以根据实际的文本结构和需求调整正则表达式模式来解析和处理多行文本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1920836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

maven编码报错

maven 编译的时候编码报错: classworlds For input string: "ㄻ孛孛"报错原因: maven 编码使用的是UTF-16 ,系统中使用UFT-8 解决办法: 如下设置为UTF-8

SSM社区物业管理系统-计算机毕业设计源码91276

摘要 随着城市化进程的加快,居民社区的规模和数量不断增长,传统的人工管理方式已经无法满足管理需求。借助信息技术和互联网应用,社区物业管理系统可以实现物业管理信息的集中化、自动化和便捷化,提供全方位的管理和服务支持。社区…

PostgreSQL17索引优化之支持并行创建BRIN索引

PostgreSQL17索引优化之支持并行创建BRIN索引 最近连续写了几篇关于PostgreSQL17优化器改进的文章,其实感觉还是挺有压力的。对于原理性的知识点,一方面是对这些新功能也不熟悉,为了尽可能对于知识点表述或总结做到准确,因此需要…

Linux之文件fd

个人主页:点我进入主页 专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 C进阶​ ​​​​算法 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂 目录 一.文件内容的回顾 二.提炼一下对文件的…

狂飙的鸭子,哪里跑!安定的力量(深度好文)——早读(逆天打工人爬取热门微信文章解读)

容我也来卖个小聪明,学习洞见,深度好文 引言Python 代码第一篇 洞见 安定的力量(深度好文)第二篇结尾 引言 老刺激了 骑着自行车在路上狂摇 刚刚好赶上打卡时间 早上一切很平和 听书 吃绿豆饼茶 做早餐 准点一天的排泄 老天估计…

快手矩阵系统:一键发布,多平台自动文案生成

在当今信息爆炸的时代,自媒体平台的崛起为用户提供了广阔的展示舞台。然而,对于内容创作者来说,如何高效地在多个平台上发布内容,同时保持文案的吸引力和独特性,一直是一个不小的挑战。幸运的是,随着技术的…

基于xinference推理引擎 + glm4-9b-chat模型的本地化部署探索

【备注】从langchain-chatchat v0.3开始,所有的模型配置,均由推理模型(如:xinference )进行加载和启动。 xinference 中配置并启动模型 1、查看支持的模型 xinference registrations --model-type LLM 2、执行tran…

相约 TDBC丨拓数派将亮相 2024 可信数据库发展大会!

2024 年,我国数据库正处于蓬勃发展期和关键应用期,在人工智能迅猛发展和数据要素市场化建设的浪潮下,为进一步推动全球数据库产业进步,2024 可信数据库发展大会将于 2024 年 7 月 16-17 日,在北京朝阳悠唐皇冠假日酒店…

计网ip层重要面经总结

文章目录 127.0.0.1, localhost, 0.0.0.0有什么不同?ipv6还需要NAT吗?DNS查询服务器的基本流程浏览器输入一个URL到显示器显示的过程PING是怎么工作的?ipv4和ipv6究竟有哪些区别?什么是跨域,什么情况下会发生跨域问题&#xff1f…

前端面试题42(MVVM与MVC区别)

MVVM(Model-View-ViewModel)和MVC(Model-View-Controller)都是软件架构模式,主要用于简化应用程序开发中的复杂性,尤其是在用户界面和数据管理方面。尽管它们有一些相似之处,但在设计理念和实施…

GD32MCU最小系统构成条件

大家是否有这个疑惑:大学课程学习51的时候,老师告诉我们51的最小系统构成?那么进入32位单片机时代,gd32最小系统构成又是怎么样的呢? 1.供电电路 需要确保供电的电压电流稳定,以东方红开发版为例&#xff…

基于深度学习的行人重识别

目录 1、基于表征学习的ReID方法 2、基于度量学习的ReID方法 (1)对比损失(Contrastive loss) (2)三元组损失(Triplet loss) (3) 四元组损失(Quadruplet loss) (4)难样本采样三元…

React+TS前台项目实战(三十)-- 首页构建之基于react-query和性能hook实现全页面数据渲染

文章目录 前言一、首页源码详细注释说明技术分析1. 页面功能分析2. 代码详细注释 二、效果展示总结 前言 前三篇文章详细介绍了首页的响应式布局,采用关注点分离进行模块拆解,现在只需按需引入模块,页面更加简洁,代码的维护性得到…

【鸿蒙学习笔记】关系型数据库概述

目录标题 关系型数据库的运行机制样例代码共通方法 DBUtilsIndex 代码效果 关系型数据库的运行机制 1、 关系型数据库对应用提供通用的操作接口,底层使用SQLite作为持久化存储引擎,支持SQLite具有的数据库特性,包括但不限于事务、索引、视图…

MongoDB教程(一):Linux系统安装mongoDB详细教程

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、Ubuntu…

【单片机毕业设计选题24059】-太阳能嵌入式智能充电系统研究

系统功能: 系统由太阳能电池板提供电源, 系统上电后显示“欢迎使用智能充电系统请稍后”, 两秒钟后进入主页面显示。 第一行显示太阳能电池板输入的电压值 第二行显示系统输出的电压值 第三行显示采集到的太阳能电池板温度 第四行显示设置的太阳能…

【Linux杂货铺】1.环境变量

1.环境变量基本概念 环境变量( environment variables )一般是指在操作系统中用来指定操作系统运行环境的一些参数。如:我们在编写 C / C +代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪…

信创会不会烂尾

最近又有不少人开始忽悠信创概念了,感觉这又是部分人发财的噱头,集体资源浪费的开始! 我们软件业几代人和全世界的差距能短时间内追上?人家会本着友谊第一比赛第二的原则,站在原地等你追?然后和你一起相扶到美好的未来&#xff1…

华为HCIP Datacom H12-821 卷37

1.多选题 下面关于Network- Summary-LSA 描述正确的是 A、Network- Summary-LSA中的Metric被设置成从该ABR到达目的网段的开销值 B、Network- Sumary-LSA中的Net mask 被设置成目的网段的网络掩码 C、Network- Summary-LSA 是由ASBR产生的 D、Network- Summary-LSA 中的Li…

年度必看|2024全球工业网络市场份额预测报告

重点摘要 每年,HMS Networks 都会对工业网络市场进行全面分析,旨在估计工厂自动化中按类型和协议划分的新连接节点的分布情况。最新研究表明,工业网络市场继续扩张,预计 2024 年将增长 7%。值得注意的是,工业以太网仍然…