gpt4 book ai didi

regex - 在 Perl 中使用正则表达式拆分字符串

转载 作者:行者123 更新时间:2023-12-01 11:35:02 25 4
gpt4 key购买 nike

我需要帮助将以下字符串拆分为 (Date, ID, msecs)
May 26 09:33:33 localhost archiver: saving ID 0191070818_1462647213_489705 took 180 msec
我只想要第一个下划线之前的 ID 的第一部分。

所以这就是我希望输出的样子
May 26 09:33:33, 0191070818, 180
我无法弄清楚在正则表达式中放入什么

use strict;
use warnings;

my $data = 'May 26 09:33:33 localhost archiver: saving ID 0091070818_1432647213_489715 took 180 msec';

my @values = split('/[]/', $data);

foreach my $val (@values) {
print "$val\n";
}

exit 0;

最佳答案

好的。这种拆分是行不通的——因为你使用了单引号,字符串是按字面使用的。由于它不会出现在您的示例文本中,因此它根本不执行任何操作。

Split 根据字段分隔符“剪切”一个字符串,这可能不是您想要的。例如。

 split ( ' ', $data ); 

会给你:
$VAR1 = [
'May',
'26',
'09:33:33',
'localhost',
'archiver:',
'saving',
'ID',
'0091070818_1432647213_489715',
'took',
'180',
'msec'
];

鉴于您的字符串并没有真正像那样正确地“字段化”,我建议采用不同的方法:

你需要从中选择你想要的东西。假设您没有混入一些奇怪的记录:
my $data = 'May 26 09:33:33 localhost archiver: saving ID 0091070818_1432647213_489715 took 180 msec';

my ($time_str) = ( $data =~ m/^(\w+ \d+ \d{2}:\d{2}:\d{2})/ );
my ($id) = ( $data =~ m/(\d+)_/ );
my ($msec) = ( $data =~ m/(\d+) msec/ );
print "$time_str, $id, $msec,\n";

注意 - 您可以组合您的正则表达式模式(如某些示例所示)。我这样做是希望简化和澄清正在发生的事情。正则表达式匹配应用于 $data (因为 =~ )。括号中的“匹配”元素 ()然后提取并“返回”以插入左侧的变量中。

(注意 - 您需要在括号中包含 'my ( $msec)',因为这样会使用该值,而不是测试结果 (true/false))

关于regex - 在 Perl 中使用正则表达式拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31520056/

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