2016-08-12 85 views
2

我需要在一個文本文件中的重音,以取代所有字符替換重音的人多重音符號,那就是:崇高文本立即

á é í ó ú ñ 

其非重音等效:

a e i o u n 

這可以通過一次性整個文件的正則表達式命令來實現嗎?


更新(2017年2月1日)

我通過Keith Hall拿着great answer,變成了一個崇高的包。你可以在這裏找到它:Remove​Non​Ascii​Chars

+0

不確定正則表達式,但是,個人而言,我會確保對任何文件的Unicode支持。 – Xufox

+0

這不是我所悲傷的。沒有unicode支持,因此我需要用重音替換字符。 – Gabriel

回答

6

您可以像使用正則表達式:

(?=\p{L})[^a-zA-Z] 

找到與變音符號的字符。

  • (?=\p{L})積極前瞻,以確保下一個字符是一個Unicode字母
  • [^a-zA-Z]負字符類排除字母沒有變音符號。

這是必要的,因爲崇高文本(或者更具體地說,它使用查找和替換的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文件夾)中,爲使mething像remove_non_ascii_chars.py(文件擴展名是很重要的,基礎名稱是不是)

  4. 查看菜單 - >在view.run_command('remove_non_ascii_chars')顯示控制檯
  5. 類型/粘貼,然後按Enter鍵
  6. 變音符號將被刪除(字符重音將被轉換爲非重音等同物)。

注:以上實際上也刪除所有非ASCII字符,以及...

延伸閱讀:

+0

偉大的答案基思,謝謝! – Gabriel