为什么这不起作用?
re.sub('\\b[a@](\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')
我不明白为什么@ss
未被*
取代。同样,@55
未被替换。
这些被替换:a55,a5s,as5,ass
谢谢!
答案 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。