gpt4 book ai didi

正则表达式拆分键值对忽略双引号中的空格

转载 作者:行者123 更新时间:2023-12-03 10:31:10 24 4
gpt4 key购买 nike

我的正则表达式没有达到应有的水平,提前道歉。

代码:

#!/usr/bin/perl -wT
use strict;
use warnings;
use Text::ParseWords;

my @AoH;
my $filename = 'metadata.txt';

open(my $fh, '<', $filename) or die "Could not open file '$filename' $!";
while (<$fh>) {
my $rec = {};
for my $field ( split ) {
(my $key, my $value) = quotewords('=', 0, $field);
$rec->{$key} = $value;
print "$key -> $value;\n";
}
push @AoH, $rec;
}

我要解析以下字符串(位于 metadata.txt 中):

video_info="This is a video description" video_name="avideoname.mp4" video_thumb="avideothumbnail.jpg"

基本上,我想拆分上述字符串,以便引号中的任何内容都是一个值(包括空格),而 = 之前的任何内容都是一个键。

我想要的输出:

video_info -> This is a video description;
video_name -> avidenoname.mp4;
video_thumb -> avideothumbnail.jpg;

我使用它作为引用来创建我的哈希数组:http://docstore.mik.ua/orelly/perl/prog3/ch09_03.htm ,对代码稍作修改(例如,使用引号而不是拆分)。我觉得这主要是一个正则表达式问题,但如果有任何问题或使用过时的代码,请随时纠正/解释任何不一致之处。

任何帮助将不胜感激。提前致谢。

最佳答案

split 不适合将由空格分隔的字符串拆分成两个同样包含空格的子字符串。

例如,在您的情况下, split 用于此行:

video_info="This is a video description" video_name="avideoname.mp4"

将给出如下数组:

qw(video_info="This, is, a, video, description", video_name="avideoname.mp4")

这绝对不是想要的输出。

相反,您可以使用 quotewords分割这一行:

quotewords('\s+', 0, $_)

将给予:

qw(video_info="This is a video description", video_name="avideoname.mp4")

另外,最好在处理一行之前chomp,以消除\n的影响。

#!/usr/bin/perl -w
use strict;
use warnings;
use Text::ParseWords;

my @AoH;
my $filename = 'metadata.txt';

open(my $fh, '<', $filename) or die "Could not open file '$filename' $!";
while (<$fh>) {
chomp;
my $rec = {};
for my $field ( quotewords('\s+', 0, $_) ) {
(my $key, my $value) = quotewords('=', 0, $field);
$rec->{$key} = $value;
print "$key -> $value;\n";
}
push @AoH, $rec;
}

关于正则表达式拆分键值对忽略双引号中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19762412/

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