【问题标题】:Replace the character # with incrementally increasing numbers用递增的数字替换字符#
【发布时间】:2015-01-26 10:33:13
【问题描述】:

我正在处理文本,并希望将 # 字符替换为递增的数字。文本如下所示:

第 2 章。#

第2章#

第2章#

第2章#

我正在努力让它阅读:

第 2.1 章

第 2.2 章

第 2.3 章

第 2.4 章及最多三位数。

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

我已尝试搜索# 然后用 \i、\1、\1\i 或 \1\i 替换。

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

【问题讨论】:

  • 代码几乎肯定是一个更好的解决方案。
  • 正则表达式的存在并不意味着任何事情都应该使用它。
  • 你的意思是使用perl还是awk?我想我最终会遇到同样的语法问题。

标签: regex replace


【解决方案1】:

一种解决方案是使用 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;

【讨论】:

  • perl -pe 'BEGIN { 我们的 $i = 1; } s/#/($i++)/ge;'
  • 您是否在询问如何更改代码,以便为不同的前缀(章节、标题、节)和每个前缀的不同顶级数字独立地从 1 增加二级数字?
  • 感谢您的帮助。文本确实发生了变化,数字也发生了变化:Chap.2.#,然后是 Section.1.#),然后是 Quote.11.#.,其中 # 在每种情况下都被逐渐替换。我打算只是剪切并粘贴第一个解决方案,根据需要更改文本,然后意识到搜索更改的初始名称会更快,辅助数字会更改,然后是需要增加的 # 1 表示与“text.number.#”一样多的实例。我将测试您提供的第二个解决方案,看看它是否在仅使用“chap.1.#, chap.2.#, chap.3.#.”的文本中运行良好
【解决方案2】:

这是一种在命令行中使用 PHP 执行此操作的方法,该方法使用名为 convert.php 的文件,该文件将文件名作为参数。注意:没有for循环:

<?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 将所有包含“#”的章节标题替换为递增的数值是可行的。

【讨论】:

  • 这个怎么用?我创建了一个名为 convert.php 的 php 文件,并在终端中(我在 Mac 上)运行 /hr ~:~ ~$ php /Users/~/Desktop/convert.php /~/Desktop/章节.txt;但我得到一个解析错误。还有其他方法吗?
  • 所以,如果我正确地回答了您的问题,您有一个文件 chapters.txt,其中可能有多个“Chapter.2.#”实例,这就是您要转换为指定格式的内容?略有不同的问题,所以我需要修改我提供的解决方案。我需要回复你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
相关资源
最近更新 更多