python从字符串中删除ctrlcharacter

2024-06-16 10:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一堆XML文件分批转储到磁盘。 当我试着练习它们时,我发现有些人在属性中插入了一个控制字符

看起来是这样的:

<root ^KIND="A"></root>

当它看起来像这样的时候:

<root KIND="A"></root>

在这种情况下,它很容易修复,只是一些regexp魔法:

import re
xml = re.sub(r'<([^>]*)\v([^>]*)>', r'<\1K\2>', xml)

但后来需求发生了变化,我不得不单独将文档转储到磁盘。 当然,在存钱之前我会先把替代品生下来,这样我就不会再有这个问题了

你会看到很多这样的文件,数百万

所以,我准备再次从中提取一些数据

但这一次我遇到了一个新错误:

<root KIND="A"><CLASSIFICATION></CLASSIFICATIO^N></root>

当它看起来像这样的时候:

<root KIND="A"><CLASSIFICATION></CLASSIFICATION></root>

我不知道为什么我总是收到这些错误,也不知道为什么总是插入“ctrl字符”。到目前为止,这可能是纯粹的运气

我在第一个案例中使用的regexp通常不会磨损,^K转换为垂直标签,因此我可以再次匹配它。但是有什么东西可以过滤掉任何ctrl字符吗


Tags: 文件re属性错误情况rootxml字符
1条回答
网友
1楼 · 发布于 2024-06-16 10:19:55

尝试使用转换表从ctrl-a到ctrl-Z删除:

in_chars = ''.join([chr(x) for x in range(1, 27)])
out_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
tr_table = str.maketrans(in_chars, out_chars)

# pass all strings through the translate table:
x = input('Enter text: ')
print(x.translate(tr_table))

印刷品:

Enter text: abc^Kdef
abcKdef

相关问题 更多 >