Python Regex:为什么这不起作用?

2024-09-28 01:31:54 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么这样不行?你知道吗

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

我不明白为什么@ss不被*取代。类似地,@55也不被替换。你知道吗

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

谢谢你!你知道吗


Tags: ressasss5as5a55a5s
3条回答

如果你在尝试一种“亵渎”检查-我会把逻辑从正则表达式中去掉。你知道吗

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。你知道吗

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

我的建议是:

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

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

第一节周围没有一对圆括号。试试这个:

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

相关问题 更多 >

    热门问题