用逐渐增加的数字替换字符#

时间:2014-11-27 18:49:14

标签: regex replace

我正在使用文本,并希望用递增的数字替换#字符。文字如下:

Chap.2。#

Chap.2。#

Chap.2。#

Chap.2。#

我正试着读它:

Chap.2.1

Chap.2.2

Chap.2.3

第2.4章和最多三位数。

我的源文档是Mellel,但我也有Nisus Writer Pro,以及许多其他文本编辑器,如TextMate,Atom,TextWrangler,Brackets,CotEditor,jEdit等。我尝试在应用程序中使用正则表达式使用它的可用性,但无济于事。

我试过搜索# 然后用\ i,或\ 1,或\ 1 \ i或\ 1 \ i替换。

有人可以帮忙吗?我已经在SO和其他网站上阅读了很多其他类似的问题,但我似乎无法使语法正确(加上其他示例并不足以帮助我解决这个问题)。谢谢。

2 个答案:

答案 0 :(得分:2)

一种解决方案是使用perl:

perl -pe 'BEGIN { our $i = 1; } s/Chap\.2\.#/"Chap.2.".($i++)/ge;' <chapters.txt;

扩展以处理多个顶级数字,将每个顶级数字的第二级数字从1递增:

perl -pe 'BEGIN { our $h = {}; } s/Chap\.(\d+)\.#/"Chap.$1.".(exists($h->{$1}) ? $h->{$1}++ : ($h->{$1} = 1)++)/ge;' <chapters.txt;

要查找并逐步替换您可以执行的#字符:

perl -pe 'BEGIN { our $i = 1; } s/#/$i++/ge;' <chapters.txt;

答案 1 :(得分:0)

以下是在命令行中使用PHP执行此操作的方法,该文件名为convert.php,该文件将文件名作为参数。注意:没有for-loop:

<?php

if ( count($argv) < 2 ) {
 echo "Correct syntax is: convert.php filename.ext\n";
 exit;
}

$file = $argv[1];
$contents = file_get_contents( $file );
$nu = preg_replace_callback('/\#/',function($matches){
                          static $i=1;
                          return $i++;
                          },$contents);
echo '<pre>',"\n";                        
echo $nu;
file_put_contents("bestNumberedChapters.txt",$nu);

因此,使用PHP替换包含&#39;#&#39;的所有章节标题是可行的。具有增量的数值。