正则替换的方法:
def replaceContent(self, content):
        pattern = r'@(.*?) '
        def repl(match):
            if match.group(0):
                _link_name = match.group(0)
                link_name = re.findall(pattern, _link_name)
                return '@<a href="/member/' + link_name[0] + '">' + link_name[0] + '</a> '
        content = re.sub(pattern, repl, content)
        return content
需要内容替换直接掉这个方法就好了
最后的最后 去了解一下 re.sub 中第二个参数
     1 
                    
                    nanlong      2016-10-21 11:34:52 +08:00 
                    
                    正则替换 
                 | 
            
     2 
                    
                    helloccav      2016-10-21 11:37:41 +08:00 
                    
                    /\s@(.*?)\s/ 
                通过正则提取出主题、回复里出现过的所有用户名,传递到后端检查用户是否传在,传在就加上正超链接  | 
            
     3 
                    
                    cheetah      2016-10-21 11:42:50 +08:00 
                    
                    存储的时候转为用户 id 存 
                 | 
            
     7 
                    
                    21grams      2016-10-21 12:06:00 +08:00 
                    
                    在发帖的时候就已经替换了吧 
                 | 
            
     8 
                    
                    lrh3321      2016-10-21 12:06:05 +08:00 
                    
                    页面上看到的应该只是正则替换,@不存在的 ID 仍然 会有下划线 
                后台可能是检测下被 @ 的人是否存在,然后发通知过去吧  | 
            
     10 
                    
                    qiayue   PRO 被 @ 的提醒,是在提交的时候处理的 
                前端显示的时候再次把所有 @ 转换成链接,也有可能会缓存格式化的内容,这样就省去每一次显示的时候格式化  | 
            
     12 
                    
                    Lpl      2016-10-21 12:11:24 +08:00 via Android 
                    
                    
                 | 
            
     13 
                    
                    shawshi   OP @Lpl 应该是在将回复数据保存到数据库时 做了正则替换。他保存到数据库时就是 带 html 格式的回复内容。知乎直接使用的 div 做的富文本编辑器,他在前端 @完就会生成带有连接的 a 标签。 
                 | 
            
     14 
                    
                    wyntergreg      2016-10-21 12:26:29 +08:00 
                    
                    前端正文正则匹配 
                提交后端队列提醒  | 
            
     15 
                    
                    dong3580      2016-10-21 13:26:08 +08:00 
                    
                    压根不需要什么正则,就算你 @不存在的依然会显示链接。 
                在打开 https://www.v2ex.com/member/xxxx 这个页面检查一次当前用户是否存在。 至于收到提醒,插入一条记录呀,没有也插入呀,反正 @没有的人不存在。 测试: @aaaaaaab 这里 带空格 @aaaaaaab 这里 不带空格 @这里 汉字 @aaaaaaab,这里 带标点 @aaaaaaab ,这里 带标点和空格  | 
            
     16 
                    
                    laduary      2016-10-21 13:31:16 +08:00 
                    
                    
                 | 
            
     17 
                    
                    ruandao      2016-10-21 13:42:31 +08:00 
                    
                    @史蒂夫流口水了电风扇的饭了 
                 | 
            
     18 
                    
                    shawshi   OP @dong3580 后台需要用正则去处理你提交的内容。因为那个正则无法匹配到中文,所以那儿就没有显示超链接。 @不存在的人,因为后端没有验证处理。 
                 | 
            
     19 
                    
                    Immortal      2016-10-21 14:18:07 +08:00 
                    
                    看前面讨论的  
                我插楼问个问题 对于这种 @后的内容提取,比如用户名 是前端提取后当,单独当一个参数给后台 还是前端什么都不管 纯粹交给后台去正则处理 ...主要考虑到如果 @功能用的人多 正则性能又低下的话  | 
            
     20 
                    
                    StevenTong      2016-10-21 14:22:04 +08:00 
                    
                    
                 | 
            
     21 
                    
                    bumz      2016-10-21 18:55:30 +08:00 
                    
                    
                 | 
            
     23 
                    
                    bumz      2016-10-21 19:03:24 +08:00 
                    
                    已证实,不是前端做的 
                   | 
            
     24 
                    
                    Lpl      2016-10-21 19:04:51 +08:00 via Android 
                    
                    
                 | 
            
     28 
                    
                    qweweretrt515      2016-10-21 20:50:02 +08:00 
                    
                    
                 | 
            
     29 
                    
                    IanPeverell      2016-10-22 10:33:22 +08:00 
                    
                    不过有一点比较有意思,就是列表只能展示出该主题下发过言的用户 
                也许是前端储存了该帖内的参与人员信息,然后在正则替换也说不定  | 
            
     30 
                    
                    run2      2016-10-22 20:05:13 +08:00 
                    
                    @IanPeverell  就在页面里啊,还用猜? 
                $("#reply_content").textcomplete([{ match: /(^|\s)@(\w*)$/, search: function (term, callback) { term = term.toLowerCase(); var words= [.....  | 
            
     31 
                    
                    honmaple      2016-10-23 14:27:53 +08:00 
                    
                    以前写过类似的功能    
                ``` def at_user(self, content): usernames = findall(r'@([\u4e00-\u9fa5\w\-]+)', content) ex_usernames = [] for username in usernames: user = User.query.filter_by(username=username).first() if user is not None and username != current_user.username: ex_usernames.append(user.username) href = '/u/' + username u = '@' + username + ' ' content = content.replace(u, '@<a href="%s">%s</a> ' % (href, username)) usernames = list(set(ex_usernames)) return content, usernames ```  |