我最近试图将导出的Common Lisp符号从字符串转换为关键字。我基本上希望"HELLO"
成为:hello
。我尝试使用Emacs replace-regexp命令。以下是我给出的两个表达方式:
"\([^ ]*\)"
:\,(downcase \1)
我测试了第一个,检查是否能找到我希望它替换的所有情况,并且确实如此。但是,当我使用替换时,它工作除了符号不是小写的("HELLO"
变为:HELLO
)。然后我尝试将第一个表达式更改为一个案例一个案例。有点像:
"\([-A-Z+*/\<>=&]*\)"
奇怪的是,当我使用相同的第二个表达式与这个新的第一个表达式时,它完美地工作。这是一个错误,还是我实际上做错了什么?
答案 0 :(得分:1)
这是replace-regexp
的记录行为,请参阅其文档字符串:
Preserve case in each match if `case-replace' and `case-fold-search'
are non-nil and REGEXP has no uppercase letters.
因此,为避免案例保留,您可以在匹配的正则表达式中包含大写字母,或者 Mx set-variable RET case-replace RET nil 。 (您也可以设置case-fold-search
,但这会影响很多搜索功能,而case-replace
只影响替换功能。)
请参阅https://stackoverflow.com/a/13706627/319698了解非交互式版本。