我需要删除{} &+( )" =!.?.:.. / | » © : >< # « ,] _ - + ; [ ]
等所有符号,包括文件中的数字。
import codecs
import re
def clean_symbol() :
symbols = re.compile(r'[{} &+( )" =!.?.:.. / | » © : >< # « ,] _ - + ; [ ] % 1, 2,3',flags=re.UNICODE)
with codecs.open("e.txt","r") as fileobject:
for line in fileobject:
good_words = symbols.sub(" ",line)
print(good_words)
with codecs.open("/home/corpus/Clean_tex1t.txt",'a',encoding="utf-8") as out:
out.write(good_words)
这是从Unicode文本文件中删除符号但代码产生预期结果的代码。 输入
« »
_ _468 60_1");
_ " :1004 :1000; ;"
:1004 :0 ;"
" :0099 ;"
_ 2" :68 :14 3300 ( 12 _ . ) 68 -137 ;" " :4 20 5 12 ;" . "
"
സര്ക്കാര്ജീവനക്കാരുടെ ശമ്പളം അറിയാന് ഭാര്യമാര്ക്ക് അവകാശമുണ്ട്വിവരാവകാശകമ്മീഷന്
" ="_ " :8 ;"
" ="_ "
" ="_ "
预期输出
സര്ക്കാര്ജീവനക്കാരുടെ ശമ്പളം അറിയാന് ഭാര്യമാര്ക്ക് അവകാശമുണ്ട്വിവരാവകാശകമ്മീഷന്
代码根本不起作用。这有什么问题?
答案 0 :(得分:1)
正则表达式可能不是处理问题的最佳方法,除非您真的只想过滤掉指定的特殊字符。 略有不同的方法,可能并不精彩,但会返回预期的结果:
# coding=utf-8
text = u"<yourcontenthere>"
res = ""
for i in text:
if ord(i)>255:
res = res + i
print res
这适用于您的示例。 (我已对它进行了测试。)它会过滤掉所有ASCII字符,并为您留下您期望的结果。
答案 1 :(得分:1)
我推荐使用regex模块进行严肃的unicode工作。此外,匹配要保留的符号(=白名单)通常比删除不需要的字符(=黑名单)更容易。例如:
import regex
print ' '.join(regex.findall(ur'[\p{IsMalayalam}\u200D]+', data))
打印您要查找的内容。 [\p{IsMalayalam}\u200D]
匹配马拉雅拉姆语字符或ZWJ符号。
答案 2 :(得分:0)
字符类中的语法非常有限,并且具有插入符号的特殊情况(如果它是字符类中的第一个字符则表示否定),短划线(如果它不是第一个或最后一个字符,则表示范围在字符类中)和关闭方括号(表示字符类的结尾,除非它是可选插入符后面的第一个字符,也许是破折号)。通常,打开方括号列在关闭方括号旁边,以保持配对。
所以你的正则表达式必须重构为
r'[-][{} &+( )" =!?:./|»©:><#«,_\-+;]'
排除重复项并假设加号之前的字符不是常规ASCII短划线而是某些Unicode字符。 (也许使用十六进制转义来消除歧义。我发现我必须反斜杠。)
如果您想添加数字,那应该很容易。你似乎也缺少单引号;这是故意的吗?