代码之家  ›  专栏  ›  技术社区  ›  Aaron Silverman

是否有单个正则表达式来替换分隔列表中的数字?

  •  2
  • Aaron Silverman  · 技术社区  · 15 年前

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

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

    例如,我需要能够删除元素' 2 '在以下列表中:

    "1,2,3"
    "1,3,2"
    "2,1,3"
    "2"
    "12,2,21"
    ""
    
    2 回复  |  直到 13 年前
        1
  •  1
  •   David Wolever    15 年前

    这应该是您想要的:

    /(\b|,)2(\b|,)/
    
        2
  •  0
  •   JasonWoof    13 年前

    去除 (更换见下文)

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

    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/'
    
    推荐文章