1

テキストのブロックを指定して、@username (ユーザー名は任意のユーザー名にすることができます) のすべてのインスタンスを検索し、ユーザー名が有効かどうかを確認し、有効な場合はテキスト内をリンクに置き換えたいと考えています。

@username のすべてのインスタンスをリンクに置き換える方法は知っていますが、そのチェックを最初に挿入する方法がわかりません。True または False を返す is_valid(username) という関数がある場合、誰でもそれを手伝ってもらえますか?

ここに私が持っているものがあります:

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 に答える