我不想写这个论坛并且问我这个论坛但是我被困了,而我所关注的那本书应该是初学者,不过是......
无论如何......在下面的字符串中:
'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)
此外,我欢迎任何有关此主题的建议额外资源,提前致谢...
答案 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
开头,则限制性较差。