用regex用sub()方法替换字符串

时间:2016-09-09 22:50:59

标签: python

我不想写这个论坛并且问我这个论坛但是我被困了,而我所关注的那本书应该是初学者,不过是......

无论如何......在下面的字符串中:

'Agent Alice told Agent Bob that Agent Steve was a double agent.'

我想只显示代理人名字的第一个字母。所以我最终得到的是:

'Agent A**** told Agent B**** that Agent S**** was a double agent.'

我尝试使用分组,就像在书中一样,但它不起作用。

namesRegex = re.compile(r'\w?([A-Z])')
mo = namesRegex.sub(r'\1****', 'Agent Alice told Agent Bob that Agent 
Steve was a double agent.')
print(mo)

此外,我欢迎任何有关此主题的建议额外资源,提前致谢...

1 个答案:

答案 0 :(得分:1)

您可以使用?<=语法后面的语法:

namesRegex = re.compile(r'(?<=Agent\s[A-Z])\w+')
mo = namesRegex.sub(r'****', 'Agent Alice told Agent Bob that Agent Steve was a double agent.')

mo
# 'Agent A**** told Agent B**** that Agent S**** was a double agent.'

这将替换任何字词\w+,包括字母_ Agent\s[A-Z]后的字母数字字符和下划线****Agent\s[A-Za-z]。如果不能保证代理商的名字以大写字母sort -k2,2nr -k1,1d /tmp/sort.txt开头,则限制性较差。