2

为什么这不起作用?

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

我不明白为什么@ss不替换为*. 同样,@55不更换。

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

谢谢!

4

3 回答 3

2

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

这是我的建议:

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

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

于 2012-08-16T23:29:55.327 回答
0

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

re.sub('(\\b[a@])*(\\W|[a@])*[s5$](\\W|[s5$])*[s5$](\\W|[s5$])*($|\\W)', '*', '@ss')
于 2012-08-16T23:29:20.153 回答
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 的单词边界类似。

于 2012-08-16T23:43:40.843 回答