regex - 珀尔 : Regular Expression with changing decimal to hexadecimal

标签 regex string function perl

我有一个文件,其中许多十进制数以如下形式给出

Hello
Hey
'37888' =>'A'
'37890' =>'B'
'37642' =>'C'

现在我试过了,

while (my $line = <$Log1>) {
    $line =~ s/'(\d+)'/(\hex(\d+))/g);    #Here I am getting error
    print $line;
    };
sub hex{
my $num = @_;
my $n= ("0x"."%x\n", $num);
return $n; 
};   

我认为 (\hex(\d+)) 会起作用。有什么建议吗?

最佳答案

您可以使用 sprintf将十进制数格式化为十六进制并使用 s///e 计算 sprintf:

use warnings;
use strict;

while (my $line = <DATA>) {
    $line =~ s/(\d+)/sprintf '0x%x', $1/eg;
    print $line;
}

__DATA__
Hello
Hey
'37888' =>'A'
'37890' =>'B'
'37642' =>'C'

输出:

Hello
Hey
'0x9400' =>'A'
'0x9402' =>'B'
'0x930a' =>'C'

此外,已经有一个内置的 hex函数,这意味着您应该避免创建自己的名为 hex 的函数。

关于regex - 珀尔 : Regular Expression with changing decimal to hexadecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64032327/

相关文章:

python - 为什么满足条件时我的函数不执行?

regex - gradle war重命名文件常规exp不起作用

regex - scala 中以下表达式的含义是什么?

java : Convert formatted xml file to one line string

c - 如何在 C 中正确使用字符串?

javascript - indexOf ("-") 每次返回 - 1

javascript - 如何在 React Native 应用程序中预填充 TextInput?

function - Maxscript 函数前向声明

javascript - 如何在javascript中将两个正则表达式合二为一?

java - 使用 GNU 读取连续数据时在尝试中调用匹配器函数