gpt4 book ai didi

regex - 如何在 perl regex 替换命令中使用 unicode 字符?

转载 作者:行者123 更新时间:2023-12-05 08:17:56 25 4
gpt4 key购买 nike

这在使用 unicode 字符时不起作用(在 Ubuntu bash 中):

$ perl -pC -e's/[à]/a/gu' <<< 'à'
à
$ perl -pC -e's/[b]/a/gu' <<< 'b'
a

尽管 PCRE 似乎支持它(至少根据 regex101 )。

我做错了什么?我是否在 perl 命令中遗漏了一些标志?

这在 javascript 中“有效”,所以如果我能在命令行中为此想出一个简单的单行代码,我会使用节点……但我仍然想知道为什么 perl 命令不起作用。


对于上下文:

我正在尝试使用 /[àâáãä]/a/g/[òôóõö]/o/g 等替换来对字典文件进行 asciify(即删除单词列表的重音等),因此我可以使用它使拼写检查对重音不敏感(例如在 IntelliJ Idea 中)。

基本上这些是制作“asciified”额外字典的步骤:

  1. 下载该语言的 .dic 文件(所有单词的列表)
  2. 使用 grep 过滤包含非 ascii/可替换字符的单词
  3. 连续使用正则表达式替换使单词不区分重音
  4. 在 IDE 中导入 asciified .dic 文件(除了标准语言词典)

最佳答案

所有这些的一个实用方法是使用 Text::Unidecode

perl -C -MText::Unidecode -pe'unidecode($_)'  <<< 'à'

打印a。该模块将 Unicode 文本音译为纯 ASCII。

另一种方法:使用 Unicode::Normalize 分解字符(“规范化”) , 所以这个角色和它的 diacritical marks (组合重音)被分成它们自己的代码点,同时它们仍然形成有效的 grapheme ,然后使用简单的正则表达式删除变音符号(\p{NonspacingMark}\p{Mn})。

这两种方式都会有异常(exception)和边缘情况,但我认为它可能正好满足您的需要。


对于包含特定(文字)字符的代码,需要通过utf8 pragma告诉Perl程序源是UTF-8。使用 use utf8; 或使用命令行标志 -Mutf8

perl -C -Mutf8 -pe's/[à]/a/g' <<< 'à'

关于regex - 如何在 perl regex 替换命令中使用 unicode 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70358309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com