首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >正则表达式仅替换perl中的第一次出现

正则表达式仅替换perl中的第一次出现
EN

Stack Overflow用户
提问于 2015-07-28 04:03:05
回答 5查看 1.3K关注 0票数 0

我有一个包含这些条目的文本文件

代码语言:javascript
代码运行次数:0
运行
复制
data,34.45,5343

intaa,34353.5, 646463 
dedaa, 22542.35, 3564643
eerreg, 3435,335353

rtgegr,343543,34332

我只想替换第一个空行,忽略文件中存在的所有空行。我怎么能这样做呢?

我在正则表达式中读到了有关非贪婪的内容,但找不到适合我需要的匹配。有人能提个建议吗?

我的最终数据应该如下所示

代码语言:javascript
代码运行次数:0
运行
复制
data,34.45,5343
intaa,34353.5, 646463
dedaa, 22542.35, 3564643
eerreg, 3435, 335653

rtgegr,343543,34332
EN

回答 5

Stack Overflow用户

发布于 2015-07-28 04:53:56

冒着提供“解决方案”而不是“使用正则表达式的解决方案”的风险,只需要一个空行上的条件和一个告诉您是否删除了空行的标志。

假设@input的每个元素中有一行,

代码语言:javascript
代码运行次数:0
运行
复制
@output = grep { /\S/ || !$flag++ } @input

将排除不包含非空格字符的第一行(并且只排除第一行)。您可能更喜欢这样的解决方案,因为多行正则表达式需要格外小心才能正确执行。

票数 4
EN

Stack Overflow用户

发布于 2015-07-28 04:53:04

在perl中设置一个$flag,并验证它是否在循环下的if中设置:

代码语言:javascript
代码运行次数:0
运行
复制
perl -lne 'if((/^\s*$/ && !$flag)){$flag=1;next;}print' file

输出:

代码语言:javascript
代码运行次数:0
运行
复制
data,34.45,5343
intaa,34353.5, 646463 
dedaa, 22542.35, 3564643
eerreg, 3435,335353

rtgegr,343543,34332
票数 3
EN

Stack Overflow用户

发布于 2015-07-28 04:38:31

假设:

第一行也可以是“空行”

相邻的多个“空行”不会被视为一个空行。只删除第一个空行。

s/((\n)(\n)|(^\n)())/这样的怎么样?

并将第一个捕获组替换为空。

我对perl语法不是百分之百确定,因为我的perl时代已经一去不复返了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31662216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档