【问题标题】:Only keep alpha numeric character and pre-defined specific character只保留字母数字字符和预定义的特定字符
【发布时间】: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


【解决方案1】:

因为您无法发布数据 试试这个

>>> import re
>>> test_text = 'grep -i 'blair' filename.log | more'
>>> print re.sub(r'[^|\w\.]', ' ', test_text)
'grep  i  blair  filename.log   more'

【讨论】:

  • 感谢您的帮助。这就是我需要的。 (我保留“\”所以我稍微修改你的代码:re.sub(r'[^|\w\./]', ' ', test_text)
猜你喜欢
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 2014-03-22
相关资源
最近更新 更多