1

XMPP サーバー用の禁止ボットを作成しました。これはスクリプトの一部です。

resources = ['private', 'sergeant', 'staffsergeant']

"""presence detection script here"""
if resource in resources:
    pass
else:
    print "the jid has been banned"
    """ban script here"""

privateしたがって、上記のコードは、リソースが、sergeantまたはでない限り、入るユーザーを禁止しますstaffsergeant

上記のスクリプトを変更して、リソース名の後に整数がある場合にのみ上記のリソースを禁止しないsergeant343ようにします (例: 、private5654など)。ただし、整数がない場合は禁止します。だからjid/sergeant禁止されますが、jid/sergeant432合格します。整数は、 の任意の数ですrange(0, 99999)。これどうやってするの?

4

4 に答える 4

1

正規表現を使用できます。

if not re.match(u'^(' + u'|'.join(resources) + u')\d+$', string):
  # Ban here.
于 2012-05-13T22:38:17.907 に答える
1

解決策は次のようになります。

if resource.rstrip('0123456789') in resources:
    if resource != resource.rstrip('0123456789'):
        print 'ok'
    else:
        print 'banned'
else:
    raise NotImplementedError()  # replace with own code
于 2012-05-13T22:29:03.387 に答える
0

これはあなたが探しているものですか?

import random as rn

my_string = 'string'

new_string = my_string + str(rn.randint(0,99999))

結果:

>>> new_string
'string32566'
于 2012-05-13T22:16:54.257 に答える
0

のようなもので何をしたいsergeant00432ですか?

このようなものはどうですか?

allowed_prefixes = ['private', 'sergeant', 'staffsergeant']

def resource_is_allowed(r):
    for prefix in allowed_prefixes:
        if re.match(prefix + '[0-9]{,5}', r):
            return True
    return False

または、より簡潔に、しかしあまり明確ではないかもしれませんが、

def resource_is_allowed(r):
    return any(re.match(prefix + '[0-9]{,5}', r) for prefix in allowed_prefixes)

これらはプレフィックスを正規表現として扱うことに注意してください。指定した特定のプレフィックスは、通常の文字列と同じように RE と同じ意味を持ちます。RE で特別な意味を持つ文字を含むリソース プレフィックスを許可し始める可能性がある場合は、さらに注意が必要です。

于 2012-05-13T22:23:17.287 に答える