python正则去除换行符,关于python:用于删除换行符的正则表达式

我是Python的新手,我遇到了正则表达式问题。 我正在尝试删除文本文件中每行末尾的换行符,但前提是它跟在小写字母后面,即[a-z]。 如果该行的结尾以小写字母结尾,我想用空格替换换行符/换行符。

这是我到目前为止所得到的:

import re

import sys

textout = open("output.txt","w")

textblock = open(sys.argv[1]).read()

textout.write(re.sub("[a-z]\z","[a-z]", textblock, re.MULTILINE) )

textout.close()

如果RE中没有$且没有^,则不需要标记re.MULTILINE

尝试

re.sub(r"(?<=[a-z])

?

","", textblock)

\Z仅匹配字符串末尾,在最后一个换行符之后,所以它绝对不是你需要的。 Python正则表达式引擎无法识别\Z。

(?<=[a-z])是一个正向的lookbehind断言,用于检查当前位置之前的字符是否为小写ASCII字符。只有这样,正则表达式引擎才会尝试匹配换行符。

此外,始终使用带有正则表达式的原始字符串。使反斜杠更容易处理。

你是对的! ;)

我会用[

]+替换?以命中单个。

@ThiefMaster,它也会删除空行,顺便说一句

@ThiefMaster:周围仍然有Mac使用,并且Python上运行吗?我以为Apple放弃了OS X的行结尾,但我可能完全错了。

希望不是..但你永远不知道有什么糟糕的文件 - 有太多的文件包含和的混合所以我希望一些文件仍然存在。

所以[

]{1,2}会根据我的情况做得更好:(

|

?),其中的可能性是第三个被测试的可能性。

@eyquem:肯定是第二个:(?:

|

?),或者你可能偶然删除两个相邻的Unix换行符。

顺便说一句,这个RE绝对不需要原始字符串。而\Z匹配字符串的结尾,而不是更低

哦,是的。你的?:不需要。

@eyquem:使用原始字符串总是很好的做法。你知道哪些反斜杠逃脱是必要的,哪些不是?这只是消除了一个常见的错误来源。如果我不打算捕获其内容,我也总是喜欢非捕获括号。不仅仅是出于效率原因,而是为了清晰起见,并且因为一些Python正则表达式操作在捕获parens时表现得非常不同。关于\Z和\Z,你适合使用Python - 我发现Python没有实现Perl,.NET,PCRE等常用的行为。

@Tim Pietzcker我不喜欢表达"永远"真理的句子。 Personnaly,我宁愿不使用原始字符串:这迫使我理解我写的内容并记住我的理解。在正则表达式中没有那么多的逃避,我记得更常见的,另一个我验证。这是一个品味问题。我担心RE中使用raw-string会阻止新手真正理解正则表达式编译器对RE的解释。

作为一个替代答案,虽然它需要更多的行,但我认为以下可能更清楚,因为正则表达式更简单:

import re

import sys

with open(sys.argv[1]) as ifp:

with open("output.txt","w") as ofp:

for line in ifp:

if re.search('[a-z]$',line):

ofp.write(line.rstrip("

")+"")

else:

ofp.write(line)

...并且避免将整个文件加载到字符串中。如果你想使用更少的线条,但仍然避免积极的外观,你可以这样做:

import re

import sys

with open(sys.argv[1]) as ifp:

with open("output.txt","w") as ofp:

for line in ifp:

ofp.write(re.sub('(?m)([a-z])[

]+$','\\1 ',line))

正则表达式的部分是:

(?m) [开启多线匹配]

([a-z]) [将单个小写字符作为第一组匹配]

[

]+ [匹配一个或多个回车符或换行符,以涵盖,和]

$ [匹配字符串的结尾]

...如果匹配行,则小写字母和行结尾将替换为\\1,小写字母后跟空格。

一行ofp.write(re.sub("(?<=[a-z])(

|

?)","",line)而不是四行

@eyquem:当然,但我的观点是避免使用正面的lookbehind可能会使代码更具可读性,而且额外的三行可能是值得的......好吧,我还是会添加另一个版本。

我的观点是避免使用正面的lookbehind可能会使代码更具可读性

好。虽然,就个人而言,我发现它的可读性不高。这是一个品味问题。

在你的编辑中:

首先,(?m)不是必需的,因为对于ifp中的行:一次选择一行,因此每行的字符串末尾只有一个换行符

其次,$放置时,没有效用,因为它总是匹配字符串行的结尾。

无论如何,采用你的观点,我发现了两种方式来避免看到后面的断言:

with open(sys.argv[1]) as ifp:

with open("output.txt","w") as ofp:

for line in ifp:

ante_newline,lower_last = re.match('(.*?([a-z])?$)',line).groups()

ofp.write(ante_newline+' ' if lower_last else line)

with open(sys.argv[1]) as ifp:

with open("output.txt","w") as ofp:

for line in ifp:

ofp.write(line.strip('

')+' ' if re.search('[a-z]$',line) else line)

第二个更好:只有一行,一个简单的匹配测试,不需要groups(),自然逻辑

编辑:哦,我意识到第二个代码只是你的第一个代码重写在一行,Longair

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

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

相关文章

收集一些程序员励志经典名言

1、作为一个真正的程序员&#xff0c;首先应该尊重编程&#xff0c;热爱你所写下的程序&#xff0c;他是你的伙伴&#xff0c;而不是工具。2、程序员可以让步&#xff0c;却不可以退缩&#xff0c;可以羞涩&#xff0c;却不可以软弱&#xff0c;总之&#xff0c;程序员必须是勇…

Android develop 国际化

转自别人的一片文章&#xff0c;出处以找不到了&#xff0c;觉得写得不错&#xff0c;记录一下 一、概念 1.Internationalization(I18N) 国际化 使得App在不改的源码、资源文件的情况下&#xff0c;能够适应各国、各文化、各语言 是L10N的基础 2.Localization(L10N) 本地化 为A…

php留言板记录ip,如何用php程序记录来访IP

如何用php程序记录来访IP关注:226 答案:4 手机版解决时间 2021-02-16 00:05提问者失夜久伴你2021-02-15 01:22如何用php程序获取来访IP&#xff0c;然后保存在txt文件中,并且只保留最新的30个数据.最佳答案二级知识专家追尋☆①秒方向2021-02-15 02:19有一个全局的变量&#…

【基础】jquery全选、反选、全不选代码

1、JS代码function ($) {//全选 反选 全不选$("#selAll").click(function () {$(".lists :checkbox").not(:disabled).prop("checked", true);});$("#unSelAll").click(function () {$(".lists :checkbox").not(:disabled).…

oracle 11g重新安装配置,Oracle 11g数据库安装和卸载教程

Oracle11g的安装教程同时解压缩两个zip文件&#xff0c;生成一个database文件夹&#xff0c;进入到database文件夹&#xff0c;点击setup去掉安全更新的选项&#xff0c;直接下一步选择创建和配置数据库&#xff0c;点击下一步选择服务器类&#xff0c;点击下一步选择单例数据库…

C语言中strdup函数使用方法

头文件&#xff1a;#include <string.h> 定义函数&#xff1a;char * strdup(const char *s); 函数说明&#xff1a;strdup()会先用malloc()配置与参数s 字符串相同的空间大小&#xff0c;然后将参数s 字符串的内容复制到该内存地址&#xff0c;然后把该地址返回。该地址…

高级程序员和低级程序员的区别

低级程序员认为自己与高级程序员的区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无 bug. 正如一惯的那样, 低级程序员之所以低级, 正是因为他们勉强能看到(或者根本看不到)事物的表象而看不到本质. 所以, 低级程序员总结出的一切东西, 你都可以大胆的忽略。所…

oracle中的tx锁影响查询吗,如何找到TM锁对应的TX锁?

我昨天也这样试过&#xff0c;但出来的结果和预料相差很远。wyqORCL>update emp set ename ename;12 rows updated.wyqORCL>get lockline 16 truncated.1 /* showalllock.sql */2 column username format a63 column object_name format a134 column o_name format …

IISExpress Log 文件路径

问题 用VS做开发时经常用IISExpress测试web程序&#xff0c;那么在测试过程中生成的Log文件放在哪里了&#xff1f; 答案 情况1 默认情况下 applicationhost.config 文中定义了连个日志文件路径&#xff1a;IIS_USER_HOME&#xff08;即%userprofile%\documents\IISExpress\&am…

程序员职业路线图

今天分享一张程序员职业路线图&#xff1a;欢迎关注我的公众号&#xff08;同步更新文章&#xff09;&#xff1a;DoNet技术分享平台阅读原文

jqgrid编辑php,php – 实现jqgrid单元格编辑datepicker

我知道使用datepicker进行单元格编辑是可能的,因为引用了here和here.但是,当我单击单元格时,没有出现日期选择器.下面是相关列的colModel条目.我有datepicker UI可用.在其他示例中,dataInit不包含引号.它在我的代码中,因为整个colModel是在AJAX请求期间由PHP动态创建的.我将它构…

C#编程规范整理

小编整理了一些C#编程的一些规范&#xff0c;希望对大家有点用处&#xff01;1、命名方式Pascal命名法&#xff1a;每个单词首字母均大写。Camel命名法&#xff1a;第一个单词首字母小写&#xff0c;其余单词首字母大写。2、有关类的规范1、使用 Pascal 大小写。2、用名词或名词…

利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值...

实验说明 &#xff08;1&#xff09;正向传值&#xff1a;比如A类里地值要传给B类用&#xff0c;就是我们先在A类中声明一个B类对象&#xff08;当然B类头文件要import过来&#xff09;&#xff0c;然后把A类中得某个 值传递给B类中得某个值&#xff08;所以需要在B类中先准备一…

oracle索引自增函数,oracle生成动态前缀且自增号码的函数分享

create or replaceFunction GetInvitationNO(prev varchar2, num1 varchar2, num2 varchar2, sessionSetting varchar2)Return Varchar2Authid Current_User Is PRAGMA AUTONOMOUS_TRANSACTION;-- 需要使用“Current_User”的权限防止无法运行“Execute Immediate”命令 & …

JS字符串转换为JSON的四种方法笔记

1、jQuery插件支持的转换方式&#xff1a;示例&#xff1a;$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象2、浏览器支持的转换方式(Firefox&#xff0c;chrome&#xff0c;opera&#xff0c;safari&#xff0c;ie)等浏览器&#xff1a;…

iOS Block全面分析

http://my.oschina.net/leejan97/blog/268536 http://blog.csdn.net/enuola/article/details/8674063 注意事项1.内联的block中内部定义的变量 自己本身有读写权限2.block内部要修改外部变量 需要将外部变量声明__block3.Block retain是无效的&#xff0c;要想保留block生命周期…

win7 php redis 扩展,Windows中安装Redis及php redis扩展

Windows10环境安装Redis:1、下载Redis安装包&#xff1b;2、解压到自定义目录&#xff1b;3、windows键R&#xff0c;输入cmd 进入命令行&#xff0c;进入Redis的解压目录&#xff1b;4、运行&#xff1a;redis-server.exe redis.windows.conf 显示如下&#xff0c;说明启动成功…

【原创】MVC+ZTree实现权限树的功能

2、html代码权限树&#xff1a;3、JS代码var setting {async: {enable: true,url: /RoleToPerssion/GetPerssionTree,//异步加载时的请求地址autoParam: ["roleid"],//提交参数type: get,dataType: json},check: {enable: true, //true / false 分别表示 显示 / 不…

集合习题之列出有限集合所有子集

1、题目&#xff08;《离散数学及其应用》第6版P75 20 题&#xff09; 给出可以列出有限集合所有子集的步骤。 2、 解题思路 假设有集合A {a1, a2 … an}&#xff0c;列出其所有子集。 先列出含有1个元素的所有子集&#xff1a;{a1},{a2} … {an}然后列出含有2个元素的所有子…

C# partial 关键字的使用

C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分&#xff0c;分别实现在几个不同的.cs文件中。局部类型适用于以下情况&#xff1a;(1) 类型特别大&#xff0c;不宜放在一个文件中实现。(2) 一个类型中的一部分代码为自动化工具生成的代码&…