【问题标题】:Regular expression: replace one character set with another正则表达式:用另一个字符集替换一个字符集
【发布时间】:2013-10-22 01:21:32
【问题描述】:

我有一个字符串(例如3122323123123并想替换任何1->ax2->by3->cz

如何在 bash 中做到这一点?

我从字符集[123]开始,尝试使用“sed”,但不知道如何编写替换表达式?

【问题讨论】:

  • 您使用哪种语言?
  • 我认为迭代每个字符并将数字转换为字符比使用正则表达式更容易。
  • 如果您使用的是 PHP,则无需使用正则表达式即可实现,如下所示:$new_string = str_replace(array('1','2','3'), array('a','b','c'), '3122323123123');
  • 您使用什么工具或语言?
  • 请注意:正则表达式问题应该始终用您正在使用的语言以及正则表达式进行标记,因为正则表达式语法和功能从一种语言到其他。说了这么多,我认为您在这里不需要正则表达式;这看起来像是一个简单的str_replace() 的工作。

标签: regex bash sed


【解决方案1】:

Regex 在这里不是适合您的工具。您的问题中没有任何内容需要任何正则表达式。

您没有指定您的语言,但如果您使用 PHP,则可以使用函数 strtr(),它完全符合您的要求。

老旧的str_replace() 也可以做你想做的事,因为它可以接受数组作为搜索/替换参数。

大多数其他语言应该具有类似的功能,这意味着您不需要正则表达式。

【讨论】:

    【解决方案2】:

    查看标准的tr 实用程序。

    % echo "3122323123123" | tr "123" "abc" 
    cabbcbcabcabc
    

    如果你想用多个字符替换一个字符,你可以使用 sed 进行每个替换:

    % echo "3122323123123" | sed -e "s/1/ax/g" -e "s/2/by/g" -e "s/3/cz/g"
    czaxbybyczbyczaxbyczaxbycz
    

    【讨论】:

    • 酷。不知道这个。我使用了来自 Perl 的tr
    • 注意:使用-d 选项删除指定字符也非常有用。
    • Okey 但是如果我想用“1”->“ax”、“2”->“by”和“3”->“cz”之类的字符串替换一个字符,该怎么做我这样做?我认为命令 sed 可以解决这个问题
    • 在这种情况下,您可以使用sed 逐一替换,如您所说。编辑我的答案。
    【解决方案3】:

    在c#中

    string input = "3122323123123";
    string output = intput.Replace('1','a').Replace('2','b').Replace('3','c');
    

    【讨论】:

      【解决方案4】:

      以 Perl tr/// 为例:

      $ echo "3122323123123" | perl -pe "tr/123/abc/"    
      cabbcbcabcabc
      

      【讨论】:

        猜你喜欢
        • 2012-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-10
        • 2021-07-04
        • 2015-10-11
        相关资源
        最近更新 更多