Regex Perl:解析*分隔文件

Regex Perl:解析*分隔文件,regex,perl,split,Regex,Perl,Split,我有一个输入文本文件input.txt,如图所示 a,2,3*b,4,5*c,7,3* 我必须把数字打印如下 a,2,3 b,4,5 c,7,3 为什么你认为正则表达式会有帮助?这样做容易多了 tr '*' '\n' <input.txt 您可以使用以下正则表达式 /[^*]/ 您的输入有以*分隔的记录吗?我们可以将输入记录分隔符$/设置为该值 local $/ = "*"; while (<>) { chomp; print $_, "\n"; } (-la

我有一个输入文本文件input.txt,如图所示

a,2,3*b,4,5*c,7,3*
我必须把数字打印如下

a,2,3
b,4,5
c,7,3

为什么你认为正则表达式会有帮助?这样做容易多了

tr '*' '\n' <input.txt

您可以使用以下正则表达式

/[^*]/

您的输入有以
*
分隔的记录吗?我们可以将输入记录分隔符
$/
设置为该值

local $/ = "*";
while (<>) {
  chomp;
  print $_, "\n";
}
-l
auto-
chomp
s输入,并将输出分隔符附加到输出。
-p
循环检查输入的所有记录,执行代码,并打印
$\ucode>的值。我们不处理行本身,只需将记录分隔符从
*
更改为
\n


只要原始数据不包含换行符,这就可以正常工作:这些换行符是未经修改的。一个
s/\n//g
替换将在很大程度上解决这个问题。

您可以使用split:

 my $string = "a,2,3*b,4,5*c,7,3*";

 my @substr = split(/\*/, $string);

{
  local $, = "\n";
  print @substr;
}
输出:

a,2,3
b,4,5
c,7,3

您也可以尝试以下方法:

 my $data = "a,2,3*b,4,5*c,7,3*";
 my $data2 = substr($data, 0, LengthOfSampleInputStringHere - 1);
 my @values = split('*',$data2);

 # Print and verify (Optional)
 foreach my $val (@values) 
 {
    print "${val}\n";
 }
编辑

您也可以使用此正则表达式:

/([^\*]+)/

$string=~s/\*/\n/g应该为您内联完成所有替换

您尝试过什么吗?正则表达式解决方案是../[^*]/
perl-l-0052-pe0
-MO=Deparse
试试看它是如何工作的。或者作为一个obfu^D^D^D^D^D优化版本:
perl-l-0052-pe0
-l
开关放在
-0
开关之前
$\
也没有设置为
*/code>。
 my $data = "a,2,3*b,4,5*c,7,3*";
 my $data2 = substr($data, 0, LengthOfSampleInputStringHere - 1);
 my @values = split('*',$data2);

 # Print and verify (Optional)
 foreach my $val (@values) 
 {
    print "${val}\n";
 }
/([^\*]+)/