在匹配的文本之间插入换行符将被覆盖

时间:2014-08-25 14:44:01

标签: perl

我有一个文本文件。我正在尝试搜索逗号后跟日期,例如",08/18/2014"。

看起来我的代码找到了它,但它用逗号和新行替换它并删除它之后的所有内容。

 if ($firstline =~ s|\,(\d{2}\/.*)|\,\n|g){
     print "$firstline";

如何在逗号和日期之间添加新行,而不删除我的文字和日期?

感谢。

3 个答案:

答案 0 :(得分:2)

您可以在替换表达式中引用捕获组。我还扩展了正则表达式以完全匹配日期:

if ($firstline =~ s|,(\d{2}-\d{2}-\d{4})|,\n$1|g) {
   print "$firstline\n";
}

答案 1 :(得分:2)

使用前瞻/后退:

s|(?<=,)(?=\d{2}\/)|\n|g

s|,\K(?=\d{2}\/)|\n|g     # Probably faster, but requires 5.10+

答案 2 :(得分:0)

类似于亨特的答案,没有扩展的正则表达式,如下:

(哦,我不认为你需要在逗号之前使用反斜杠):

$firstline = "hello world ,10/20/1987, sounds great to me";  # testing...

if ($firstline =~ s|,(\d{2}/)|,\n$1|g){
     print "$firstline";
}

输出:

hello world ,
10/20/1987, sounds great to me