用字母和数字删除字符串中的前导 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:如何从字符串中删除前导/尾随非字母数字字符?