【发布时间】:2015-12-10 13:53:16
【问题描述】:
我有一个混合编码文件,我只想保留字母数字和一些字符,例如:.(dot)、/(dash)、|(Vertical bar)、空格(不包括 \t、\n , \F)。其他字符应替换为空格。结果内容将输出到另一个文件。
下面是我的代码:
def clean(input):
string_list = list(input)
for idx in range(0, len(string_list)):
if not re.match("\w|\s|\||\.|/", string_list[idx]):
string_list[idx] = " "
return "".join(string_list)
file_in = "input.txt"
file_out = "output.txt"
with open(file_in, "r") as f1:
with open(file_out, "w") as f2:
lines = f1.readlines()
for line in lines:
line_raw = clean(line)
f2.write(line_raw)
print "Finished!"
我注意到我的输出文件仍然包含一些特殊字符,例如存在“换页”或“换行”(它们应该被删除)。 是否有可能仍然存在一些不可见的 Unicode 字符? 我怀疑我应该以二进制模式读取文件并使用带有字节的正则表达式,如下所示: python: regular expression search pattern for binary files (half a byte) 但我还没有成功。我怎样才能达到我的目的?
edit1:我上面提到的空白应该是“真正的空白”(当我们使用空格键时产生的,而不是\t、\n、\f等)
【问题讨论】:
-
这是因为换页等包含在空格(\s)的定义中。也许您需要明确匹配空格和制表符。
-
顺便说一句,你用空格替换空格...
-
给我们一个输入文件文本示例
-
@saikumarm:由于数据敏感,我不能发布示例。
标签: regex python-2.7