我正在尝试查找和替换特殊字符,例如"垂直标签"和"不间断的空间"在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
答案 0 :(得分:1)
你的第一个正则表达式与你的想法不符。
正则表达式[\x0b]
匹配单字符,它是ASCII字节11(十六进制中的0x0B) - 它实际上等同于没有括号的相同正则表达式,因为一个字符类一个字符是多余的:\x0b
。
尝试对0b
部分使用括号表达式不起作用,因为\x0b
是单个字符的原子表示,而不是您可以在其中使用正则表达式的内容。
您可能想要做的是匹配您不想要在搜索查询中允许替换的任何字符,例如:
re.sub(r'[^a-zA-Z0-9 ]', ' ', input)
请注意括号中的字符类开头的^
,这意味着字符类被反转 - 它将匹配未明确指定的任何内容。