正则表达式的十六进制值不能在python中工作

时间:2014-09-17 06:21:27

标签: python regex google-app-engine hex

我正在尝试查找和替换特殊字符,例如"垂直标签"和"不间断的空间"在python中。

示例字符串: input = 'This is an interesting\x0b test'

当我使用re.sub('[\x0b]', ' ', input)时,它会按预期匹配,但为什么re.sub('[\x[0-9A-Fa-f]{2}]', ' ', input)不起作用?我也希望匹配其他特殊字符!

一些背景:这些特殊字符从搜索URL传递给我的python处理程序q=This%20is%20an%20interesting%0B%20test(注意%OB,这是垂直制表符)并在python中读取为{{1} }。如果我不处理此问题,则会失败并导致Google Appengine搜索API中出现以下错误 \x0b

1 个答案:

答案 0 :(得分:1)

你的第一个正则表达式与你的想法不符。

正则表达式[\x0b]匹配单字符,它是ASCII字节11(十六进制中的0x0B) - 它实际上等同于没有括号的相同正则表达式,因为一个字符类一个字符是多余的:\x0b

尝试对0b部分使用括号表达式不起作用,因为\x0b是单个字符的原子表示,而不是您可以在其中使用正则表达式的内容。

您可能想要做的是匹配您想要在搜索查询中允许替换的任何字符,例如:

re.sub(r'[^a-zA-Z0-9 ]', ' ', input)

请注意括号中的字符类开头的^,这意味着字符类被反转 - 它将匹配未明确指定的任何内容。