【发布时间】:2014-09-06 15:56:25
【问题描述】:
我想将文本的注释转换为脚注的形式。这是文本的一个最小示例。
第一段。这是第一段的第一位[1]。这是第一段的第二位[2]。
[1]第一段注释之一
[2]第一段注释二
第二段。这是第二段的第一位[1]。这是第二段的第二位[2]。
[1]第二段注释之一
[2]第二段注释二
在每个段落的末尾,会有几个以标签[1]开头的注释。每个注释将形成一个段落。
我想要做的是使用乳胶语法将这些注释插入到文本中。示例文本的期望输出是,
第一段。这是第一段的第一个位置\footnote{annotation one of paragraph one}。这是第一段的第二位\footnote{annotation two of paragraph one}。
第二段。这是第二段的第一名\footnote{annotation one of parantwo}。这是第二段的第二位\footnote{annotation one of paragraph}。
这不仅仅是通过匹配模式进行的简单替换。它可能必须以段落为基础执行。您认为最简单的方法是什么?
编辑:我想出了一个可能的解决方案来使用 sed。
去掉注解前面的换行符,
第一段。这是第一段的第一位[1]。这是第一段的第二位[2]。 [1] 第一段注释之一 [2] 第一段注释二
第二段。这是第二段的第一位[1]。这是第二段的第二位[2]。 [1] 第二段注释之一 [2] 第二段注释二
匹配模式
[1] 文本1 [1] 文本2 [2]
替换成
文本2文本1 [2]
基本上第一个 [1] 是应该插入注释的位置; [1] 和 [2] 之间的东西是要重定位的注解。
这些问题是相关的:Remove new line / line break characters only for specific linesHow can I remove a line-feed/newline BEFORE a pattern using sed,但由于缺乏正则表达式知识,我无法让这些代码为我工作。
【问题讨论】:
-
闻起来像一个太宽泛的问题..
-
“最简单的方法是什么?”:绝对不是
sed。查看一些awk问题,然后在此帖子中添加解决您的问题的尝试。 StackOverflow 旨在帮助人们解决编程问题,而不是提供免费的编码服务。祝你好运。 -
如果您没有在每个“段落”之后重置脚注计数,这会更容易
-
从根本上说,
sed是这个工作的错误工具。您也许可以编写一个sed脚本来预处理文件并生成一个新的sed脚本来处理该文件,但是当有许多更好的工具可以完成这项任务时,您就只能手忙脚乱了。我会接触 Perl(但我在 20 多年前学习了 Perl,而 Python 才几年前),但 Python 也能够处理它。部分麻烦是您必须保存第一段的所有文本,直到到达第二段的开头;只有这样你才能开始为第一段生成实际的文本。 -
我认为我之前的评论仍然有效,即使
sed脚本捕获了保留空间中的段落内容。这些将是不以方括号开头的行。问题是,当您遇到带有方括号的行时,您需要编写一个正则表达式,将行尾替换为保留空间来代替方括号的内容。这需要一种“动态正则表达式”。如果您知道一个段落中的脚注永远不会超过 9 个,那么您可以考虑某种将代码写出 9 次的 hack,但仍然存在问题。