首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在perl regexp一行中替换相同数量的项。

在perl regexp一行中替换相同数量的项。
EN

Stack Overflow用户
提问于 2015-07-28 21:40:16
回答 2查看 27关注 0票数 0

我有这样一个摇摇欲坠的CSV文件

代码语言:javascript
代码运行次数:0
运行
复制
"asdf",,,"asdf","asdf"asdf"

我想把逗号转换成标签(出于个人原因)。

我希望做这样的事:

代码语言:javascript
代码运行次数:0
运行
复制
perl -ne 's/",+"/\t/g && print' 

预期产出为

代码语言:javascript
代码运行次数:0
运行
复制
"asdf[tab][tab][tab]asdf[tab]asdf"asdf"

但这只会用多个逗号替换一个选项卡,我需要有3个逗号。是否有方法计算其中一个存在量词(+或*)中的匹配数,并使用它来确定我应该打印多少制表符

我可以处理开头和结尾的引号,除非有人想把它们扔到一边。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-28 21:44:48

好吧,你可以这么做:

代码语言:javascript
代码运行次数:0
运行
复制
perl -pe 's/"(,+)"/"\t" x length($1)/eg'

这将使用 operator生成与逗号一样多的选项卡。

票数 3
EN

Stack Overflow用户

发布于 2015-07-28 22:35:37

这将用一个选项卡替换所有逗号,因为您使用的是,+,并要求它在一次执行中匹配所有逗号。

你的代码:

代码语言:javascript
代码运行次数:0
运行
复制
perl -ne 's/",+"/\t/g && print' 

问题是"+“。它需要多种不同的

我把它改成:

代码语言:javascript
代码运行次数:0
运行
复制
perl -ne 's/,/\t/g && print' 

而且效果很好:

代码语言:javascript
代码运行次数:0
运行
复制
"asdf"                  "asdf"  "asdf   "asdf"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31687612

复制
相关文章

相似问题

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