【问题标题】:How to convert octal character values in a mixed string with Perl?如何使用 Perl 转换混合字符串中的八进制字符值?
【发布时间】:2017-11-01 19:38:13
【问题描述】:

我需要使用 Perl (v5.10) 处理来自另一个应用程序的字符串,其中嵌入了空格、逗号和其他非字母数字字符的八进制值。

例如:这个 - “11624\0040SE\00405th\0040St\0054\0040Suite\0040100”,应该是这个 - “11624 SE 5th St, Suite 100”。

我可以使用“echo -e”在 Linux 命令行中完成我正在寻找的东西,但我需要能够在 Perl 脚本中进行处理和操作。

axiar@formdev$echo -e "11624\0040SE\00405th\0040St\0054\0040Suite\0040100"

11624 SE 5th St, Suite 100

我查看了 String::Escape 模块,但它似乎没有做我认为应该做的事情。

use String::Escape qw(backslash unbackslash);
my $strval="11624\0040SE\00405th\0040St\0054\0040Suite\0040100";
my $output=unbackslash($strval);
printf("%s\n",$strval);
printf("%s\n",$output);

我在 Google 和 Stack Overflow 上搜索过很多类似的问题/答案,但还没有遇到任何问题。

我们将不胜感激您的专家协助。

【问题讨论】:

    标签: string perl octal stringescapeutils


    【解决方案1】:

    这种类型的事情通常很容易在正则表达式中完成:

    $ perl -E 'say shift =~ s[\\0([0-7]{1,3})][chr oct $1]egr' '11624\0040SE\00405th\0040St\0054\0040Suite\0040100' 11624 SE 5th St, Suite 100

    这样可能更容易。

    【讨论】:

    • 看起来八进制部分总是3个字符长,所以我会将\\0([0-7]{1,3})改为\\0([0-7]{3})
    • 非常感谢!像 Perl 正则表达式一样工作。我确实与软件供应商确认过,八进制部分将始终为 3 位,所以我接受了 AntonH 的建议。但是感谢你们俩!
    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 2021-09-07
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多