Sublime文本一次用非重音字符替换多个重音字符

时间:2016-08-12 02:50:06

标签: regex sublimetext3

我需要用文本文件中的重音替换所有字符,即:

á é í ó ú ñ

他们的非重音等价物:

a e i o u n

这可以通过一次性的整个文件的regex命令来实现吗?

更新(2017年2月1日)

我通过great answer取了Keith Hall并变成了Sublime包。您可以在此处找到它:Remove​Non​Ascii​Chars

1 个答案:

答案 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而不是正则表达式更容易/更快/更少手动工作方法:

  1. 工具菜单 - >开发者 - >新插件
  2. 粘贴以下内容:

    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)
    
  3. 将其保存在ST建议的文件夹中(这将是您的Packages/User文件夹),类似于remove_non_ascii_chars.py(文件扩展名很重要,基本名称不是)

  4. 查看菜单 - >显示控制台
  5. view.run_command('remove_non_ascii_chars')中输入/粘贴,然后按 Enter
  6. 变音符号将被删除(带重音的字符将被转换为非重音符号)。
  7. 注意:上面实际上也会删除所有非ascii字符......

    进一步阅读:

相关问题