use strict;
use warnings;
my $tmp = join "\n", <DATA>;
my @biblables = ();
Run Code Online (Sandbox Code Playgroud)
列表项将被提取并存储到while循环中的@biblables中
while($tmp=~m/\\bibitem\[([^\[\]]*)\]{([^\{\}]*)}/g)
{
push(@biblables, "\\cite{$2}, ");
}
print @biblables;
Run Code Online (Sandbox Code Playgroud)
打印时我们得到的输出如下:
\cite{BuI2001},\cite{BuI2002},\cite{BuI2003},\cite{BuI2004},\cite{BuI2005},\cite{BuI2006},
Run Code Online (Sandbox Code Playgroud)
但是我们需要像这样的输出
\cite{BuI2001},\cite{BuI2002},\cite{BuI2003},\cite{BuI2004},\cite{BuI2005},\cite{BuI2006}.
Run Code Online (Sandbox Code Playgroud)
因此,我们可以使用post regex在数组中的listitem末尾插入点
while($tmp=~m/\\bibitem\[([^\[\]]*)\]{([^\{\}]*)}/g)
{
my $post = $';
if($post!~m/\\bibitem\[([^\[\]]*)\]{([^\{\}]*)}/)
{ push(@biblables, "\\cite{$2}."); }
else { push(@biblables, "\\cite{$2}, "); }
}
print @biblables;
Run Code Online (Sandbox Code Playgroud)
如果有很短的方法可以得到这个输出,请你告诉我
#
__DATA__
\bibitem[{BuI (2001)}]{BuI2001}
\bibitem[{BuII (2002)}]{BuI2002}
\bibitem[{BuIII (2003)}]{BuI2003}
\bibitem[{BuIV (2004)}]{BuI2004}
\bibitem[{BuV (2005)}]{BuI2005}
\bibitem[{BuVI (2006)}]{BuI2006}
Run Code Online (Sandbox Code Playgroud)
您可以在事后添加逗号和句点:
while($tmp=~m/\\bibitem\[([^\[\]]*)\]{([^\{\}]*)}/g){
push(@biblables, "\\cite{$2}");
}
print join ', ', @biblables;
print ".\n";
Run Code Online (Sandbox Code Playgroud)