gpt4 book ai didi

regex - 将字符串中的多个Unicode转为字符

转载 作者:行者123 更新时间:2023-12-02 07:02:15 24 4
gpt4 key购买 nike

问题 -- 我有一个字符串,比如 Buna$002C_TexasBuna$002C_Texas' 并且 $ 后跟 Unicode。我想用它们各自的 Unicode 字符表示替换这些 Unicode。

Perl如果任何 Unicode 的形式为 "\x{002C},那么它将被转换为相应的 Unicode 字符。下面是示例代码。

#!/usr/bin/perl
my $string = "Hello \x{263A}!\n";
@arr= split //,$string;
print "@arr";

我正在处理一个包含 1000 万条记录的文件。所以我将这些字符串放在一个标量变量中。要执行与上述相同的操作,我将 $4_digit_unicode 替换为 \x{4_digit_unicode},如下所示。

$str = 'Buna$002C_TexasBuna$002C_Texas';
$str =~s/\$(.{4})/\\x\{$1\}/g;
$str = "$str"

它给了我

Buna\x{002C}_TexasBuna\x{002C}_Texas

这是因为在 $str = "$str" 处,行 $str 被插值,但不是它的值。所以 \x{002C} 没有被 Perl 插入。

有没有办法强制 Perl 也插入 $str 的内容?

还有其他方法可以实现吗?我不想取出每个 Unicode,然后使用 pack "U4",0x002C 打包,然后将其替换回去。但是一行中的某些内容(例如下面不成功的尝试)是可以的。

$str =~ s/\$(.{4})/pack("U4",$1)/g;

我知道以上是错误的;但是我可以像上面那样做吗?

对于输入字符串 $str = 'Buna$002C_TexasBuna$002C_Texas',所需的输出是 Buna,_TexasBuna,_Texas

最佳答案

这给出了期望的结果:

use strict;
use warnings;
use feature 'say';

my $str = 'Buna$002C_TexasBuna$002C_Texas';

$str =~s/\$(.{4})/chr(hex($1))/eg;

say $str;

主要有趣的项目是 s///eg 中的 ee 表示将替换文本视为要执行的代码。 hex() 将十六进制字符串转换为数字。 chr() 将数字转换为字符。替换行最好写成下面这样,以避免尝试转换后跟非十六进制字符的美元。

$str =~s/\$([0-9a-f]{4})/chr(hex($1))/egi;

关于regex - 将字符串中的多个Unicode转为字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18487337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com