1

给定一个文本块,我想找到@username 的所有实例(其中用户名可以是任何用户名),然后检查用户名是否有效,如果有效,我想用链接替换文本中的它。

我知道如何用链接替换@username 的所有实例......但我不确定如何首先插入该检查。任何人都可以帮忙 - 假设我有一个名为 is_valid(username) 的函数返回 True 或 False?

这是我所拥有的:

urlfinder = re.compile(r'@([A-Za-z0-9_]+)')
urlified = urlfinder.sub(r' <a href="http://mysite.com/users/\1">@\1</a> ', text)
4

1 回答 1

3

您可以使用一个函数作为替换 - 在这种情况下,is_valid如果用户名已知,这是一个返回 URL 的版本,否则它返回它作为匹配项给出的内容。您可以重命名此函数,而不是if uname in users调用您的is_valid函数...

def is_valid(username, users=['@jon']):
    uname = username.group()
    if uname in users:
        return '<a href="http://mysite.com/users/{0}">{0}</a>'.format(uname)
    return uname

text1 = 'blah blah @jon blah blah'
text2 = 'blah and more blah @bob whatever'

import re
print re.sub(r'@\w+', is_valid, text1)
# blah blah <a href="http://mysite.com/users/@jon">@jon</a> blah blah
print re.sub(r'@\w+', is_valid, text2)
# blah and more blah @bob whatever
于 2013-03-01T05:21:46.657 回答