很久以前,我发现this question很有趣。
今天我决定把那本书的内容翻来翻去。
我想在这个脚本中使用正则表达式。当我在Cyrillic文本上使用该脚本时,它会清除所有的Cyrillic字符,只留下标点符号和空格。
#!/usr/bin/env python3.2
# coding=UTF-8
import sys, re
for file in sys.argv[1:]:
f = open(file)
fs = f.read()
regexnl = re.compile('[^\s\w.,?!:;-]')
rstuff = regexnl.sub('', f)
f.close()
print(rstuff)在this answer中已经做了一些非常类似的事情。
基本上,我只希望能够指定一组不是字母、字母数字、标点符号或空格的字符。
发布于 2012-06-11 22:07:19
这并没有确切地回答您的问题,但是与内置的re模块相比,regex module对unicode的支持要好得多。例如,regex支持\p{Cyrillic}属性及其否定\P{Cyrillic} (以及大量的other unicode properties)。此外,它可以正确处理unicode不区分大小写。
发布于 2012-06-11 22:41:11
您可以很容易地指定unicode范围:\u0400-\u0500。另请参见here。
这是一个来自俄语维基百科的例子,还有一个来自英语维基百科的句子,其中包含一个西里尔语单词。
#coding=utf-8
import re
ru = u"Владивосток находится на одной широте с Сочи, однако имеет среднегодовую температуру почти на 10 градусов ниже."
en = u"Vladivostok (Russian: Владивосток; IPA: [vlədʲɪvɐˈstok] ( listen); Chinese: 海參崴; pinyin: Hǎishēnwǎi) is a city and the administrative center of Primorsky Krai, Russia"
cyril1 = re.findall(u"[\u0400-\u0500]+", en)
cyril2 = re.findall(u"[\u0400-\u0500]+", ru)
for x in cyril1:
print x
for x in cyril2:
print x输出:
Владивосток
------
Владивосток
находится
на
одной
широте
с
Сочи
однако
имеет
среднегодовую
температуру
почти
на
градусов
ниже添加:
另外两种方式也应该起作用,而且比指定unicode范围要少一点老套的方式:
re.findall("(?u)\w+", text)应该与西里尔文和拉丁单词characters.re.findall("\w+", text, re.UNICODE)等同于因此,更具体地针对您的问题:* re.compile('[^\s\w.,?!:;-], re.UNICODE')应该可以做到这一点。
请参阅here (第7点)
发布于 2014-11-15 20:21:06
出于实际原因,我建议使用精确的现代俄语字形子集,而不是通用的西里尔文。这是因为俄罗斯网站从不使用完整的西里尔字母子集,其中包括白俄罗斯语、乌克兰语、斯拉夫语和马其顿语字形。由于历史原因,我保留"u\0463“。
//俄语网站上使用的基本Cyr Unicode范围。0401,0406,0410,0411,0412,0413,0414,0415,0416,0417,0418,0419,041A,041B,041C,041D,041E,041F,0420,0421,0422,0423,0424,0425,0426,0427,0428,0429,042A,042B,042C,042D,042E,042F,0430,0431,0432,0433,0434,0435,0436,0437,0438,0439,043A,043B,043C,043D,043E,043F,0440,0441,0442,0443,0444,0445,0446,0447,0448,0449,044A,044B,044C,044D,044E,044F,0451,0462,0463
在多语言网站上使用这个子集,与使用原来的全范围相比,将节省60%的带宽,并将相应地提高页面加载速度。
https://stackoverflow.com/questions/10981258
复制相似问题