Python正则表达式:为什么这不起作用?

时间:2012-08-16 23:23:39

标签: python regex replace substitution

为什么这不起作用?

re.sub('\\b[a@](\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')

我不明白为什么@ss未被*取代。同样,@55未被替换。

这些被替换:a55,a5s,as5,ass

谢谢!

3 个答案:

答案 0 :(得分:2)

这是因为@不是单词字符,因此第一个\b不匹配。

这是我的建议:

re.sub('(\\ba|@)(\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')

(用\b[a@]替换(\ba|@)

答案 1 :(得分:0)

第一部分周围没有一对括号。试试这个:

re.sub('(\\b[a@])*(\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')

答案 2 :(得分:0)

如果你正在尝试某种“亵渎”检查 - 我会把正则表达式中的逻辑带出来。

look_alike = {'@': 'A', '$': 'S'}
test_string = ''.join(look_alike.get(c, c) for c in your_string.upper()) # also look at `string.translate`

然后if 'ASS' in test_string - 或类似于使用re。

的单词边界
相关问题