删除连字符


15

是时候进行新的挑战了!在各种文档格式之间复制粘贴时,这是一个常见的问题:连字。虽然它可以减少左对齐布局的参差不齐或在合理的布局中使间距均匀,但如果PDF的构造不正确并且在布局中保留了连字符,这将是您的全部烦恼,从而使复制的文本难以编辑或重排。

幸运的是,如果我们相信那里有无数的自助书,那么,如果您将其视为挑战,那就没有问题了。我相信这些自助书无一例外都涉及PPCG,如果提出挑战,任何问题都将得到解决。您的任务是从文本中删除有害的连字符和换行符,以便可以将其粘贴到任何文本编辑器中。

问题描述

您将编写一个程序或函数来删除连字符和换行符(如果适用)。的输入将是一个字符串stdin(或最接近的替代),或者作为函数的输入。在输出(在stdout或接近的替代的或功能输出)将是“校正”文本。此文本应可直接复制粘贴。这意味着前导或尾随输出都可以,但是在更正文本中间的其他输出(例如,每行的前导空格)则不行

最基本的情况如下(注意:没有尾随空格)

Lorem ipsum dolor sit amet, con-
sectetur adipiscing elit. Morbi
lacinia nisi sed mauris rhoncus.

应删除有问题的连字符和换行符,以获取

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi lacinia nisi sed mauris rhoncus.

但是,应注意一些例外情况。

  • 双换行符表示段落分隔符,应保留。
  • 专有名词和名称永远不会跨越两行,除非它们已经包含连字符(例如Navier-Stokes方程)。应删除换行符,但保留连字符。这些情况可以通过仅将首字母大写来识别。
  • 有时,连字符表示一个单词组(例如19世纪和20世纪)。如果这发生在两行之间,则在下一行以前导空格表示。

一个示例:(此示例中表达的观点是虚构的,不一定代表作者的观点;同样欢迎Runge-Kutta-Fehlberg方法的反对者参加此挑战)

Differential equations can
be solved with the Runge-Kutta-
Fehlberg method.

Developed in the nineteenth-
 or twentieth century, this
method is completely FANTAS-
TIC.

会变成

Differential equations can be solved with the Runge-Kutta-Fehlberg method. 

Developed in the nineteenth- or twentieth century, this method is completely FANTASTIC. 

根据您的喜好,换行符可以是\n\r\nASCII代码点,连字符是简单的ASCII -(减号)。不需要UTF-8支持。这个挑战是,因此最短的代码胜出。

Answers:


9

视网膜 58字节

(?<!\n)\n(?!\n)
<space>
- (?! |[A-Z][a-z])| (?= )|(?<=-) (?=[A-Z])
<empty>

<space>代表一行上的单个空格,并<empty>代表一条空的尾随线。出于计数目的,每行进入一个单独的文件,并且\n用实际的换行符替换。为方便起见,你可以把所有的上述单个文件虽然并与运行它-s的标志。

我敢肯定,做这件事的方法比较短,所以我会等一下直到打完高尔夫球。


我实际上想在Retina上解决这个问题,但不想
惹上

2

GNU Sed,68岁

-zr传递给的选项的得分包括+2 sed

s/\n\n/:/g
s/-\n([A-Z][a-z])/-\1/g
s/-\n /- /g
s/-\n//g
y/\n:/ \n/

假定输入流不包含任何:字符。如果不可接受,则:代码中的可以全部替换为其他一些不可打印的ASCII字符,例如0x7 BEL。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.