我在尝试使用我的正则表达式进行替换时遇到了麻烦。
以下是我正在使用的一些示例数据:
$/Data:
$One
$Two
$/New:
$Four
$Five
以下是我想获得的结果:
$/Data/One
$/Data/Two
$/New/Four
$/New/Five
目前,我正在使用此正则表达式:
(\$/.*?):\r\n(?:(?:\$(.*)\r\n)*)+
这允许我捕获这些数据
\1 => $/Data
\2 => One
Two
... same for other group
有没有办法通过正则表达式获得所需的结果?目前,当我使用\1/\2
替换时,我只获得\ 2捕获组的最后一项的替换。
答案 0 :(得分:1)
的Perl?我倾向于在循环中执行此操作,找到$ /:行,提取任何内容然后将其拼接到所有后续行中,直到另一个$ /:行
答案 1 :(得分:1)
由于你没有说语言,这里有一个perl脚本来完成这项工作:
#!/usr/bin/perl
use 5.10.1;
use warnings;
use strict;
use Data::Dumper;
my $str = '$/Data:
$One
$Two
$/New:
$Four
$Five';
my @l = split/\r?\n/, $str;
my @arr;
my $res;
for(@l) {
chomp;
if (m!^(\$/.*?):!) {
$res = $1;
} elsif (m!^\$(.+)$!) {
push @arr, $res.'/'.$1;
} elsif( m!^$!) {
$res = '';
}
}
say Dumper \@arr;
输出:
$VAR1 = [
'$/Data/One',
'$/Data/Two',
'$/New/Four',
'$/New/Five'
];