5

我写了一个程序来读取Windows DNS调试日志,但里面总是在域字段中出现一些有趣的字符。

下面是一个例子:

(13)\xc2\xb5\xc2\xb1\xc2\xbe\xc3\xa2p\xc3\xb4\xc2\x8d(5)示例(3)com(0)'

我想\x..用一个替换所有?

我明确键入 \xc2 如下作品

line = '(13)\xc2\xb5\xc2\xb1\xc2\xbe\xc3\xa2p\xc3\xb4\xc2\x8d(5)example(3)com(0)'
re.sub('\\\xc2', '?', line)
result: '(13)?\xb5?\xb1?\xbe\xc3\xa2p\xc3\xb4?\x8d(5)example(3)com(0)'

但如果我写如下,它就不起作用:

re.sub('\\\x..', '?', line)

我如何编写一个正则表达式来替换它们?

4

2 回答 2

3

这项工作有比正则表达式更好的工具,例如,您可以尝试:

>>> line
'(13)\xc2\xb5\xc2\xb1\xc2\xbe\xc3\xa2p\xc3\xb4\xc2\x8d(5)example(3)com(0)'
>>> line.decode('ascii', 'ignore')
u'(13)p(5)example(3)com(0)'

跳过非ASCII字符。或者通过替换,您可以将它们换成“?” 占位符:

>>> print line.decode('ascii', 'replace')
(13)��������p����(5)example(3)com(0)

但最好的解决方案是首先找出是什么错误的编码/解码导致mojibake发生,这样您就可以使用正确的代码页来恢复数据。

这里有一个关于 unbaking emojibake 的绝佳答案。请注意,这是一门不精确的科学,许多关键信息实际上都在该答案下的评论线程中。

于 2016-09-28T15:32:04.800 回答
-2

那这个呢?

line = '(13)\xc2\xb5\xc2\xb1\xc2\xbe\xc3\xa2p\xc3\xb4\xc2\x8d(5)example(3)com(0)'

pattern = r'\\x.+'
re.sub(pattern, r'?', line)
于 2016-09-28T15:46:44.863 回答