用字母和数字删除字符串中的前导 0

Posted

技术标签:

【中文标题】用字母和数字删除字符串中的前导 0【英文标题】:Remove leading 0 in String with letters and digits 【发布时间】:2018-08-14 18:11:59 【问题描述】:

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

ABC-0001,ab,0001

ABC-0010,bc,0010

我需要获取如下数据

ABC-1,ab,0001   

ABC-10,bc,0010

我可以做一个命令行替换,我尝试如下:

sed  's/ABC-0*[1-9]/ABC-[1-9]/g' file    

我最终得到了输出:

ABC-[1-9],ab,0001

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

你能告诉我我在这里缺少什么吗?

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

select regexp_replace(key,'((0+)|1-9|0+)','(1-9|0+)') from file  where key in ('ABC-0001','ABC-0010')  

输出为

ABC-(1-9|0+)1
ABC-(1-9|0+)1(1-9|0+)    

任何一个解决方案的帮助都会非常有帮助!

【问题讨论】:

另见gnu.org/software/sed/manual/…... 【参考方案1】:

试试这个:

sed -E 's/ABC-0*([1-9])/ABC-\1/g' file
                ------      --
                 |           | 
         capturing group     |
                          captured group

【讨论】:

漂亮的 ASCII 图形用于说明概念。【参考方案2】:

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

select regexp_replace(key, '(-)(0+)(.*)', '\1\3')
from file;

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

【讨论】:

以上是关于用字母和数字删除字符串中的前导 0的主要内容,如果未能解决你的问题,请参考以下文章

C语言的题目,规定输入的字符只包含字母和*号。请编写函数fun,功能是:将字符串中的前导*全删除,

SQL Server:如何从字符串中删除前导/尾随非字母数字字符?

从字符串中的多个数字中删除前导零? [C++]

如何删除字符串中的前导零和尾随零? Python

限制 XSD 中的字符串,使它们没有前导或尾随空格,并且只包含字母数字、连字符和下划线?

如何从字母数字文本中删除前导零?