首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除字符串中包含字母和数字的前导0

删除字符串中包含字母和数字的前导0
EN

Stack Overflow用户
提问于 2018-03-07 03:18:54
回答 2查看 135关注 0票数 1

我有一个逗号分隔的文件,其中我需要更改第一列,删除字符串中的前导零。文本文件如下所示

代码语言:javascript
复制
ABC-0001,ab,0001

ABC-0010,bc,0010

我需要得到下面的数据

代码语言:javascript
复制
ABC-1,ab,0001   

ABC-10,bc,0010

我可以使用命令行替换,如下所示:

代码语言:javascript
复制
sed  's/ABC-0*[1-9]/ABC-[1-9]/g' file    

我最终得到了输出:

代码语言:javascript
复制
ABC-[1-9],ab,0001

ABC-[1-9]0,ac,0010

你能告诉我我错过了什么吗。

另外,我还尝试在生成此文件的SQL中应用格式,如下所示:

代码语言:javascript
复制
select regexp_replace(key,'((0+)|1-9|0+)','(1-9|0+)') from file  where key in ('ABC-0001','ABC-0010')  

它的输出为

代码语言:javascript
复制
ABC-(1-9|0+)1
ABC-(1-9|0+)1(1-9|0+)    

任何一种解决方案的帮助都将非常有帮助!

EN

回答 2

Stack Overflow用户

发布于 2018-03-07 03:21:52

试试这个:

代码语言:javascript
复制
sed -E 's/ABC-0*([1-9])/ABC-\1/g' file
                ------      --
                 |           | 
         capturing group     |
                          captured group
票数 3
EN

Stack Overflow用户

发布于 2018-03-08 03:33:54

要在使用Oracle的查询中执行此操作,您希望删除的带有零的键值位于名为"file“的表中的" key”列中,如下所示:

代码语言:javascript
复制
select regexp_replace(key, '(-)(0+)(.*)', '\1\3')
from file;

您需要捕获破折号,因为它在匹配时被正则表达式“消费”。然后是第二组一个或多个0,然后是字段的其余部分。替换为捕获的组1和3,在输出之间保留0(如果有)。

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

https://stackoverflow.com/questions/49138414

复制
相关文章

相似问题

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