Emacs正则表达式匹配大写单词

3
我有一份使用纯文本ASCII排版的文档,目前使用大写字母来强调。我想使用M-x query-replace-regexp将大写单词替换为\emph{小写单词}(即更改“word”的大小写而不是插入字符串“lowercase”)。我可以使用\\emph{\1}进行替换,但出于某种原因,我无法使\,(downcase \1)(根据[我的阅读]文档)工作(单词的大小写未改变,尽管替换capitalise按预期工作,但我不知道如何匹配大写单词。
如果有人感到特别友善,是否有办法匹配所有大写单词直到小写单词,以便我可以将它们全部包装在一个\emph{}中?
非常感谢您的帮助。我已经阅读了文档,但是经过一个小时的尝试理解正则表达式后,我的头痛并且没有任何进展...
1个回答

5
  • query-replace-regexp(查询替换正则表达式)
  • \([A-Z][A-Z \n]*[A-Z]\)(匹配大写字母组成的单词或短语)
  • \\emph{\,(downcase \1)}(使匹配到的单词或短语小写)

请注意,在正则表达式中,需要实际执行 C-q C-j 而不是使用 \n


谢谢,它做了我想要的一切。当然,它会匹配下一个单词的首字母,如果是大写的话,但我可以接受这个。在某个时候,我可能会弄清楚它是如何工作的。 - 2e0byo
如果你担心匹配整个单词,为什么不直接使用\<\([A-Z]+\)\>呢? - Inaimathi
@Inaimathi,你的正则表达式不能同时匹配由空格分隔的多个单词。 - abo-abo
真的,但它将匹配每个全大写的单词,并且不会出现反直觉地匹配像 FOO Bar 这样的内容。 - Inaimathi
@Inaimathi,每个单词都大写并不是要求的。我更喜欢简单明了的解释,尤其是对于新手来说。 - abo-abo
@abo-abo 这个新手对于没有复杂的事情感到非常感激 :) - 2e0byo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接