Gab*_*iel 4 regex sublimetext3
我需要用文本文件中的重音替换所有字符,即:
á é í ó ú ñ
Run Code Online (Sandbox Code Playgroud)
因为他们的非重音等价物:
a e i o u n
Run Code Online (Sandbox Code Playgroud)
这可以通过一次性的整个文件的regex命令来实现吗?
更新(2017年2月1日)
我带着极大的答案由基思·霍尔,变成了一个崇高的包.你可以在这里找到它:删除非Ascii Chars.
Kei*_*all 14
您可以使用正则表达式:
(?=\p{L})[^a-zA-Z]
Run Code Online (Sandbox Code Playgroud)
找到带有变音符号的字符.
(?=\p{L}) 积极前瞻以确保下一个字符是Unicode字母[^a-zA-Z] 否定字符类,以排除没有变音符号的字母.这是必要的,因为Sublime Text(或者更具体地说,它用于查找和替换的Boost正则表达式引擎)不支持\p{M}.有关元字符的作用的更多信息,请参见http://www.regular-expressions.info/unicode.html\p.
不幸的是,要进行替换,您需要手动指定要替换的字符.为了使其更难,ST似乎不支持POSIX字符等价物,也不支持替换中的条件,这将允许您使用捕获组在一次传递中进行查找和替换.
因此,您需要使用多个查找表达式,如:
[ÀÁÂÃÄÅ]
Run Code Online (Sandbox Code Playgroud)
用...来代替
A
Run Code Online (Sandbox Code Playgroud)
和
[àáâãäå]
Run Code Online (Sandbox Code Playgroud)
用...来代替
a
Run Code Online (Sandbox Code Playgroud)
等等
这是很多手工工作.
更容易/更快/更少手动工作的方法是使用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)
Run Code Online (Sandbox Code Playgroud)将它保存在ST建议的文件夹中(这将是你的Packages/User文件夹),类似于remove_non_ascii_chars.py(文件扩展名很重要,基本名称不是)
view.run_command('remove_non_ascii_chars')并按Enter注意:上面实际上也会删除所有非ascii字符......
进一步阅读: