text="\xe2\x80\x94"
print re.sub(r'(\\(?<=\\)x[a-z0-9]{2})+',"replacement_text",text)
输出为—
在这种情况下如何处理十六进制十进制字符?
答案 0 :(得分:2)
您的输入没有反斜杠。它有3个字节,U+2014 EM DASH字符的UTF-8编码:
unicode
您需要直接匹配这些UTF-8字节,或者从UTF-8解码到repr()
并匹配代码点。后者是优选的;总是尝试将文本作为Unicode处理,以简化您一次要转换的字符数。
另请注意,Python的\xhh
输出(在交互式解释器中回显或打印列表,dicts或其他容器时使用时)使用re.sub(r'[\x80-\xff]+', "replacement_text", text)
转义序列来表示任何不可打印的字符。对于UTF-8字符串,包括ASCII范围之外的任何字符串。你可以用以下方法替换该范围之外的任何东西:
id
考虑到这个'匹配连续多个 UTF-8编码的字符,并将它们作为一组替换!
答案 1 :(得分:0)
您的输入是十六进制,而不是实际的“\ xe2 \ x80 \ x94”。 \ x只是表示以下字符应以十六进制解释的方式。
this post解释了这一点。