【问题标题】:Replace username twitter in python在python中替换用户名twitter
【发布时间】:2017-11-17 19:37:18
【问题描述】:

我有如下字符串

tweet = "thank you guys, for coming my birthday @abcd @defg @hijk , and  @abcd don't forget your promises"

如何将该推文更改为

tweet = "thank you guys, for coming my birthday USERNAME_TWITTER_1 USERNAME_TWITTER_2 USERNAME_TWITTER_3 , and USERNAME_TWITTER_1 don't forget your promises"

`

【问题讨论】:

    标签: algorithm python-3.x twitter


    【解决方案1】:

    您可以使用id_dispatcher 函数:

    from itertools import count
    
    def id_dispatcher():
        return lambda c=count(1): next(c)
    

    然后我们可以从collections 包中设置一个defaultdictionary:

    from collections import defaultdict
    
    dc = defaultdict(id_dispatcher())
    

    然后使用regex replacement(参见Twitter用户名正则表达式的构造链接):

    import re
    
    re_user = re.compile(r'(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9]+)')
    outp = re_user.sub(lambda x : 'USERNAME_TWITTER_%s'%dc[x.group(0)],tweet)
    

    这会产生:

    >>> re_user.sub(lambda x : 'USERNAME_TWITTER_%s'%dc[x.group(0)],tweet)
    "thank you guys, for coming my birthday USERNAME_TWITTER_1 USERNAME_TWITTER_2 USERNAME_TWITTER_3 , and  USERNAME_TWITTER_1 don't forget your promises"
    

    【讨论】:

    • 你可以让你的id_dispatcher - from itertools import count; from collections import defaultdict; dc = defaultdict(lambda c=count(): next(c))...
    • Willem - 仍然稍微复杂化了 id_dispatcher - 在这一点上,它更简单易懂地写成 def id_dispatcher(): yield from count()...
    • @JonClements: 但那是不可调用的......然后应该调用 next(..) 。确实可以使用id_dispatcher().__next__,但通常这被认为是糟糕的编码风格。
    • @WillemVanOnsem 哎呀好点 - 那么我们还是回到我原来的评论...... :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2019-07-24
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 2019-02-26
    • 2013-10-20
    相关资源
    最近更新 更多