【问题标题】:Is there a single regular expression to replace a number in a delimited list?是否有一个正则表达式可以替换分隔列表中的数字?
【发布时间】:2011-03-21 09:28:39
【问题描述】:

我有一个字符串,范围从空字符串到逗号分隔数字的任意列表。例如:"1,2,3"

不幸的是,当我编写删除元素的代码时,我有一堆 if 语句——主要是处理它是列表中的第一个、最后一个还是唯一的元素。我一直在想一定有更好的方法!

例如,我需要能够删除以下列表中的元素“2”:

"1,2,3"
"1,3,2"
"2,1,3"
"2"
"12,2,21"
""

【问题讨论】:

    标签: regex list csv


    【解决方案1】:

    这应该做你想做的:

    /(\b|,)2(\b|,)/
    

    【讨论】:

    • 啊,我忘记了 \b。这正是我想要的,谢谢!
    • 如果 2 在中间,这将删除之前的逗号和之后的逗号。示例:echo "1,2,3" | sed -e 's/\(\b,\)2(\b,\)//' 给你:“13”,但应该给你“1,3”
    【解决方案2】:

    正在删除(请参阅下面的替换)

    我找不到要删除的简单的单个表达式,所以似乎最好的办法就是按顺序匹配每个模式:

    echo "x,x,1,x,2,x,x" | sed -e 's/,x,/,/g;  s/^x,//;  s/,x$//;  s/^x$//'
    

    有点冗长,但可读性很强。

    更换

    echo "x,x,1,x,2,x,x" | sed -e 's/,x,/,y,/g;  s/^x,/y,/;  s/,x$/,y/;  s/^x$/y/'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2013-02-21
      相关资源
      最近更新 更多