【问题标题】:Removing line breaks from bibtex file in emacs从 emacs 中的 bibtex 文件中删除换行符
【发布时间】:2014-04-19 12:01:56
【问题描述】:

我有一个 bibtex 文件(由 jabref 生成),我想删除字段中的换行符,例如,

@INPROCEEDINGS{Sims1994b,
  author =       {Sims, K.},
  title =        {{Evolving 3D Morphology and Behavior by
                 Competition.}},
  booktitle =    {{Proceedings of the 4th International Conference on
                 Artificial Life}},
  pages =        {28--39},
  year =         1994
}

应该变成

@INPROCEEDINGS{Sims1994b,
  author =       {Sims, K.},
  title =        {{Evolving 3D Morphology and Behavior by Competition.}},
  booktitle =    {{Proceedings of the 4th International Conference on Artificial Life}},
  pages =        {28--39},
  year =         1994
}

不幸的是,我的 regexp-fu 不能胜任这项任务 :-)

【问题讨论】:

  • 你已经尝试了什么?
  • 我在"{{\\(.*^J\\).*}}" 上玩过各种变体,但我无法捕获一对或两对花括号之间的文本,并且只删除那里的换行符...

标签: regex emacs bibtex


【解决方案1】:

对于您给出的示例,这可以完成工作:

M-x query-replace-regexp RET \({[^=},]+\)^J + RET \1 RET

我不知道如何强制 SO 格式化程序包含它,但 \1 后面应该有一个 空格,因为“竞争”和“人工”将被粘在"by" 和 "on" 如果你省略它。

另请注意,^J 代表换行符的引用插入(但根据您上面的评论,我假设您已经知道这是通过发出 C-q C-j 产生的)。


替换文本中的\1 是对第一个括号组的反向引用。这告诉 Emacs 在替换字符串中包含与 \( 和 \) 之间的正则表达式部分匹配的内容(并丢弃/覆盖其他所有内容)。


如果您还不熟悉它,re-builder 是一个出色的(内置!)工具,用于逐步构建正则表达式。

【讨论】:

  • 谢谢,内部[^=},] 让我到达那里!
猜你喜欢
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 2011-03-09
  • 2011-01-10
  • 1970-01-01
相关资源
最近更新 更多