python-2.7 - 从 Python 文本文件中的字符串中删除 '\x'

标签 python-2.7

这是我第一次在 Stack 上发帖。如果有人能帮助我解决这个问题,我将不胜感激。

我正在尝试从包含以下内容的文本文件中删除 Unicode 字符(在我的例子中为 \x3a):

10\x3a00\x3a00

最终输出应该是:
100000

基本上,我们被指示删除 \xXX 的所有痕迹,其中 X 可以是以下任何一个: 0123456789ABCDEF 。我尝试使用正则表达式如下删除任何 \xXX
Re.sub(‘\\\x[a-fA-F0-9]{2}’,””, a)

其中“a ”是文本文件的一行。

当我尝试这样做时,我收到一条错误消息“invalid \x escape”。

我已经为此苦苦挣扎了几个小时。我的正则表达式有什么问题?

最佳答案

人物"\x3a"不是多字节 Unicode 字符。它是 ASCII 字符 ":" .一旦你指定了字符串 "\x3a" ,它在内部存储为字符 ":" . Python 没有看到任何 "\" Action 发生。所以你不能去掉"\x3a"作为多字节 Unicode,因为 Python 只能看到单字节 ASCII 字符 ":" .

$ python
>>> '\x3a' == ':'
True
>>> "10\x3a00\x3a00" == "10:00:00"
True

查看维基百科文章的描述部分 UTF-8 .查看范围内的字符 U+0000-U+007F编码为单个 ASCII 字符。

如果要去除非 ASCII 字符,请执行以下操作:
>>> print u'R\xe9n\xe9'
Réné
>>> ''.join([x for x in u'R\xe9n\xe9' if ord(x) < 127])
u'Rn'
>>> ''.join([x for x in 'Réné' if ord(x) < 127])
'Rn'

如果您想保留欧洲字符但丢弃具有更高码位的 Unicode 字符,则更改 127ord(x) < 127到一些更高的值(value)。

帖子replace 3 byte unicode ,有另一种方法。您还可以使用以下方法去除代码点范围:
>>> str = u'[\uE000-\uFFFF]'
>>> len(str)
5
>>> import re
>>> pattern = re.compile(u'[\uE000-\uFFFF]', re.UNICODE)
>>> pattern.sub('?', u'ab\uFFFDcd')
u'ab?cd'

请注意,使用 \u可能比使用 \x 更容易用于指定字符。

另一方面,您可以使用字符串 "\\x3a"你可以去掉。当然,该字符串实际上不是多字节 Unicode 字符,而是 4 个 ASCII 字符。
$ python
>>> print '\\x3a'
\x3a
>>> '\\x3a' == ':'
False
>>> '\\x3a' == '\\' + 'x3a'
True
>>> (len('\x3a'), len('\\x3a'))
(1, 4)

您还可以去掉 ASCII 字符 ":" :
>>> "10:00:00".replace(":", "")
'100000'
>>> "10\x3a00\x3a00".replace(":", "")
'100000'
>>> "10\x3a00\x3a00".replace("\x3a", "")
'100000'

关于python-2.7 - 从 Python 文本文件中的字符串中删除 '\x',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46656104/

相关文章:

Python write() 函数将先前的数据写入下一个文件

python-2.7 - 为什么 os.chflags() 在 Linux 下不起作用?

Python:在枚举中查找字符串的最快方法

Python 运算符覆盖 : __ge__ result is not as expected

python-2.7 - 统一码编码错误 : 'ascii' codec can't encode characters in position 321-322: ordinal not in range(128)

python - 为什么导入模块与覆盖打印冲突?

python - 我将如何实现返回可重现结果的类似 random.choice() 的函数?

python-2.7 - pip、easy_install 命令在 Ubuntu 中不起作用。安装了 Python 2.7 和 3.4

python - pygame 中的连续对象创建?

python - 我可以将项目及其属性存储在外部文件中并在需要时调用它吗? (用 Python 编写 Roguelike 时)