我需要在一個文本文件中的重音,以取代所有字符替換重音的人多重音符號,那就是:崇高文本立即
á é í ó ú ñ
其非重音等效:
a e i o u n
這可以通過一次性整個文件的正則表達式命令來實現嗎?
更新(2017年2月1日)
我通過Keith Hall拿着great answer,變成了一個崇高的包。你可以在這裏找到它:RemoveNonAsciiChars。
我需要在一個文本文件中的重音,以取代所有字符替換重音的人多重音符號,那就是:崇高文本立即
á é í ó ú ñ
其非重音等效:
a e i o u n
這可以通過一次性整個文件的正則表達式命令來實現嗎?
更新(2017年2月1日)
我通過Keith Hall拿着great answer,變成了一個崇高的包。你可以在這裏找到它:RemoveNonAsciiChars。
您可以像使用正則表達式:
(?=\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,而不是正則表達式:
粘貼如下所示:
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
文件夾)中,爲使mething像remove_non_ascii_chars.py
(文件擴展名是很重要的,基礎名稱是不是)
view.run_command('remove_non_ascii_chars')
顯示控制檯注:以上實際上也刪除所有非ASCII字符,以及...
延伸閱讀:
偉大的答案基思,謝謝! – Gabriel
不確定正則表達式,但是,個人而言,我會確保對任何文件的Unicode支持。 – Xufox
這不是我所悲傷的。沒有unicode支持,因此我需要用重音替換字符。 – Gabriel