除去大部分从字符串非字母字符的elisp
问题描述:
我需要删除字符串中的所有非字母字符和数字除了-
和_
除去大部分从字符串非字母字符的elisp
对于许多语言中流行的解决方案是使用类似这个[^\\w\\-_]
由于某些原因,与replace-regexp-in-string
一起使用时,该表达式会删除所有内容。
虽然\\W
去除一切,但字母和数字如预期:
(message (replace-regexp-in-string "\\W" "" "Set AA053 Лыв № foo_bar (设)"))
将输出:因为我需要保留的非拉丁字符SetAA053Лывfoobar设
a-zA-Z0-9
不会解决我的问题。
谢谢!
答
的POSIX类是特定于语言环境,并根据该documentation,
‘[:alnum:]’
此任何字母或数字相匹配。 (目前,对于多字节字符,它匹配任何具有单词语法的字符。)‘[:alpha:]’
这匹配任何字母。 (目前,多字节字符,它匹配任何有单词的语法)
这就是为什么匹配不是字母,数字的任何字符,或下划线/连字符,你可以使用一个negated character class解决方法:
打开方括号后打字插入否定字符类。结果是字符类匹配不在字符类中的任何字符。
所以,是的,你可以在字符类的末尾使用
"[^[:alnum:]_-]"
^^ ^
或者
"[^[:alpha:][:digit:]_-]"
连字符由正则表达式引擎视为一个连字符,没有任何范围定义运算符。
如果您不在乎_
并且想要替换它,请从字符类中删除。
我觉得[这篇文章](http://emacs.stackexchange。com/questions/8261/how-to-determine-if-the-current-character-is-a-letter)几乎可以回答你的问题。 –
我发布了基于我删除的评论的扩展答案。 –