gpt4 book ai didi

regex - 如何将正则表达式字符串替换值($ 1,$ 2等)映射到哈希?

转载 作者:行者123 更新时间:2023-12-04 18:13:28 24 4
gpt4 key购买 nike

my (@keys,@values) = ($text =~ /\{IS\:([a-zA-Z0-9_-]+)\}(.*)\{\\IS\:([a-zA-Z0-9_-]+)\}/g);

应该匹配这样的字符串
{IS:cow}moo{\IS:cow}
{IS:cow}moo{\IS:cow}
{IS:dog}bark{\IS:dog}
{IS:dog}meow{\IS:dog} #probably not a dog

除了所有$ 1,$ 2和$ 3的值都被转储到@keys中之外,..所以我试图弄清楚如何使这些家伙成为$ 1 => $ 2对的一个很好的哈希值。

对于整个上下文,我想 真的要做的是让regex表达式返回看起来像的数据结构(并为找到键的次数附加一个计数)
{ 
cow_1 => moo,
cow_2 => moo,
dog_1 => bark,
dog_2 => meow,
}

有没有办法使用map {}函数通过Regex完成此操作?像这样的东西?
my %datahash = map { ( $1 eq $3 ) ? { $1 => $2 } : undef } @{ regex...};

$ 1等于$ 3以确保其匹配的标签(无需递归检查这些标签是否嵌套),如果是的话,请使用$ 1作为键,并使用$ 2作为值;

然后对于每个这些键=>值对,我要替换
{IS:cow}moo{\IS:cow}
{IS:cow}moo{\IS:cow}


{cow_1}
{cow_2}

然后,如果$ cachedData {cow}为true,则所有cow_ *都将替换为其%datahash中的键...

最佳答案

我从正则表达式中删除了无用的反斜杠和括号,并在char类中使用了快捷方式:

#!/usr/bin/perl
use warnings;
use strict;

my $text = '{IS:cow}moo{\IS:cow}
{IS:cow}moo{\IS:cow}
{IS:dog}bark{\IS:dog}
{IS:dog}meow{\IS:dog}';

my %cnt;
my %animals;
while ( $text =~ /\{IS:([\w-]+)}(.*)\{\\IS:[\w-]+}/g ){
$animals{$1 . '_' . ++$cnt{$1}} = $2;
}

print "$_ => $animals{$_}\n" for sort keys %animals;

关于regex - 如何将正则表达式字符串替换值($ 1,$ 2等)映射到哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317811/

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