在regex中使用sub()方法时如何避免突变?

2024-06-16 18:43:07 发布

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

namesRegex = re.compile(r"Agent \w+") 
namesRegex.sub('CENSORED', 'Agent Alice gave the secret documents to Agent Bob.')

当我这么做的时候,它不仅改变了代理人,还改变了爱丽丝和鲍勃。我的意思是它再改变一个词。 我试着理解这一点,例如,当我只想改变爱丽丝,它也改变了“给”了。 我怎么能在Regex中只更改一个单词?你知道吗

还有一个问题,我们这样写重新编译(r“.*等”) 但是即使我们不写“r”,比如r.compile(“.*etc”),它也会做同样的事情。那我们为什么要在那边写信呢?你知道吗


Tags: thetoresecret单词documentsregexagent
2条回答

签出regex101

您可以针对不同的输入测试regex表达式,并查看哪些匹配。它甚至解释了比赛中使用的规则。你知道吗

例如,对于Agent \w+的解释是:

Agent matches the characters Agent literally (case sensitive)
\w+
matches any word character (equal to [a-zA-Z0-9_])
+ Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed

您可以改为将'Agent '作为正向lookback模式的一部分,以便re.sub仅与代理名称匹配,因此仅将代理名称替换为'CENSORED'

namesRegex = re.compile(r"(?<=Agent )\w+") 

相关问题 更多 >