mag*_*tar 8 regex unicode python-3.x
曾几何时,我发现这个问题很有趣.
今天我决定玩那本书的文字.
我想在此脚本中使用正则表达式.当我在西里尔文本上使用脚本时,它会清除所有西里尔字符,只留下标点符号和空格.
#!/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)
Run Code Online (Sandbox Code Playgroud)
在这个答案中已经完成了一些非常相似的事情.
基本上,我只是希望能够指定一组不是字母,字母数字或标点符号或空格的字符.
这并不完全回答你的问题,但该regex模块有很多很多更好地支持Unicode比内置re模块.例如,regex支持\p{Cyrillic}属性及其否定\P{Cyrillic}(以及大量其他unicode属性).此外,它正确处理unicode不区分大小写.
您可以非常轻松地指定unicode范围:\u0400-\u0500.另见这里.
这是一个来自俄罗斯维基百科的一些文本的例子,还有来自英文维基百科的一个句子,其中包含一个西里尔文单词.
#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
Run Code Online (Sandbox Code Playgroud)
输出:
???????????
------
???????????
?????????
??
?????
??????
?
????
??????
?????
?????????????
???????????
?????
??
????????
????
Run Code Online (Sandbox Code Playgroud)
另外两种方法也应该起作用,并且比指定unicode范围稍微不那么强烈:
re.findall("(?u)\w+", text) 应该匹配西里尔字母和拉丁字符.re.findall("\w+", text, re.UNICODE) 是等价的所以,更具体地针对你的问题:*re.compile('[^\s\w.,?!:;-], re.UNICODE')应该做的伎俩.
见这里(第7点)
| 归档时间: |
|
| 查看次数: |
6213 次 |
| 最近记录: |