我正在尝试从Python中的字符串中删除某些字符。我有一个我需要删除的字符或字符范围列表,以十六进制表示,如下所示:
SELECT COUNT(*)
FROM score_table
WHERE score > X;
我将此列表转换为正则表达式,如下所示:
- "0x00:0x20"
- "0x7F:0xA0"
- "0x1680"
- "0x180E"
- "0x2000:0x200A"
但是,当我在那里re.sub(u'[\x00-\x20 \x7F-\xA0 \x1680 \x180E \x2000-\x200A]', ' ', my_str)
时,我收到了错误。
我发现Python实际上并没有将\x2000-\x200A
解释为字符:
u'\x2000'
它将它视为'x20'(空格)以及其后的其他内容:
>>> '\x2000'
' 00'
x2000是一个有效的unicode字符: http://www.unicodemap.org/details/0x2000/index.html
我希望Python以这种方式对待它,以便我可以使用>>> '\x20blah'
' blah'
将其从字符串中删除。
作为替代方案,我想知道另一种从字符串中删除这些字符的方法。
我感谢任何帮助。谢谢!
答案 0 :(得分:2)
在unicode字符串中,您需要指定unicode字符(\uNNNN
而不是\xNNNN
)。以下作品:
>>> import re
>>> my_str=u'\u2000abc'
>>> re.sub(u'[\x00-\x20 \x7F-\xA0 \u1680 \u180E \u2000-\u200A]', ' ', my_str)
' abc'
答案 1 :(得分:1)
来自文档(https://docs.python.org/2/howto/unicode.html):
Unicode文字也可以使用与8位相同的转义序列 字符串,包括\ x,但\ x只需要两个十六进制数字,所以它不能 表达一个任意的代码点。八次逃脱可以达到U + 01ff, 这是八进制777。
>>> s = u"a\xac\u1234\u20ac\U00008000"
... # ^^^^ two-digit hex escape
... # ^^^^^^ four-digit Unicode escape
... # ^^^^^^^^^^ eight-digit Unicode escape
>>> for c in s: print ord(c),
...
97 172 4660 8364 32768