我最近开始处理西里尔文字,这真的很困难。
我根本无法让我的 Python 脚本使用它。我尝试过。
PHP 运行得很好,但我不懂 PHP。我只是设法将一些东西组合在一起,但我仍然感觉不舒服。 (不过,它可能会成为一个中流砥柱,因为它被证明出乎意料地有用。)
当然,grep
这是不可能的。
或者是吗?
这就是这个问题的目的。
我想这样做:
alec@ROOROO:~/$ grep '\w\{4\}' cyrillicstuff
……然后空手而归。
但是有没有办法我可以使用良好的 'ol grep 返回所有 4 个字符或更大的单词,因为它们都是西里尔字母?
答案1
我相信您需要使用基于 unicode 的字符类。单词字符的区域设置感知类是,[:alnum:]
并且它在字符类内部使用,因此命令将是
grep '[[:alnum:]]\{4\}' cyrillicstuff
并确保您的区域设置设置为文件实际使用的编码。您可以使用locale
命令检查并查找它为LC_CTYPE
类别提供的值。
所有使用 POSIX 基本或扩展正则表达式(如 sed、awk 等)的工具以及 python 和 php 使用的 perl 和“perl 兼容正则表达式”都支持此语法。 perl 和“perl 兼容正则表达式”有一种附加语法\pX
and \p{xxx}
,其中X
orxxx
是 unicode 类别名称,因此\pL
与 相同[:alpha:]
并且\p{Uppercase}
应该与 相同[:upper:]
。所有 unicode 类别都应该可用。
广告蟒蛇。 Python 也完全支持 unicode。在 python 3 中,它应该开箱即用,以区域设置编码打开文件似乎是默认的(但我只是查了一下,没有测试)。但是在 python 2 中,您必须手动指定编码。它们应该为 stdin、stdout 和 stderr 设置,但对于所有其他文件,您必须使用该codecs.open
函数并指定从中获取的编码locale.getpreferredencoding()
,并且必须像 C 中那样用locale.setlocale(locale.LC_ALL, '')
.