我需要用文本文件中的重音替换所有字符,即:
á é í ó ú ñ
他们的非重音等价物:
a e i o u n
这可以通过一次性的整个文件的regex命令来实现吗?
更新(2017年2月1日)
我通过great answer取了Keith Hall并变成了Sublime包。您可以在此处找到它:RemoveNonAsciiChars。
答案 0 :(得分:12)
您可以使用正则表达式:
(?=\p{L})[^a-zA-Z]
找到带有变音符号的字符。
(?=\p{L})
肯定前瞻以确保下一个字符是Unicode字母[^a-zA-Z]
负字符类,用于排除没有变音符号的字母。这是必要的,因为Sublime Text(或者更具体地说,它用于查找和替换的Boost regex engine)不支持\p{M}
。有关\p
元字符的作用的详细信息,请参阅http://www.regular-expressions.info/unicode.html。
对于替换,遗憾的是您需要手动指定要替换的字符。为了使其更难,ST似乎不支持POSIX character equivalents,也不支持conditionals in the replacement,这将允许您使用捕获组在一次传递中进行查找和替换。
因此,您需要使用多个查找表达式,如:
[ÀÁÂÃÄÅ]
替换为
A
和
[àáâãäå]
替换为
a
等
这是很多手工工作。
使用Python API而不是正则表达式更容易/更快/更少手动工作方法:
粘贴以下内容:
import sublime
import sublime_plugin
import unicodedata
class RemoveNonAsciiCharsCommand(sublime_plugin.TextCommand):
def run(self, edit):
entire_view = sublime.Region(0, self.view.size())
ascii_only = unicodedata.normalize('NFKD', self.view.substr(entire_view)).encode('ascii', 'ignore').decode('utf-8')
self.view.replace(edit, entire_view, ascii_only)
将其保存在ST建议的文件夹中(这将是您的Packages/User
文件夹),类似于remove_non_ascii_chars.py
(文件扩展名很重要,基本名称不是)
view.run_command('remove_non_ascii_chars')
中输入/粘贴,然后按 Enter 注意:上面实际上也会删除所有非ascii字符......
进一步阅读: