【问题标题】:Python - How to include any random integer in a stringPython - 如何在字符串中包含任何随机整数
【发布时间】:2012-05-13 22:13:42
【问题描述】:

我为 XMPP 服务器创建了一个禁止机器人,这是我脚本的一部分:

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

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

所以上面的代码禁止任何用户进入,除非他们的资源是privatesergeantstaffsergeant

我想将上述脚本更改为禁止上述任何资源当且仅当它们在资源名称后有一个整数时(例如:sergeant343private5654 等.),但如果它们没有任何整数,则禁止它们。所以jid/sergeant 被禁止但jid/sergeant432 通过。该整数可以是range(0, 99999) 中的任何数字。我该怎么做?

【问题讨论】:

    标签: python sockets random xmpp ejabberd


    【解决方案1】:

    解决方案如下:

    if resource.rstrip('0123456789') in resources:
        if resource != resource.rstrip('0123456789'):
            print 'ok'
        else:
            print 'banned'
    else:
        raise NotImplementedError()  # replace with own code
    

    【讨论】:

      【解决方案2】:

      你可以使用正则表达式。

      if not re.match(u'^(' + u'|'.join(resources) + u')\d+$', string):
        # Ban here.
      

      【讨论】:

        【解决方案3】:

        这是你要找的吗?

        import random as rn
        
        my_string = 'string'
        
        new_string = my_string + str(rn.randint(0,99999))
        

        结果:

        >>> new_string
        'string32566'
        

        【讨论】:

          【解决方案4】:

          你想用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 中包含具有特殊含义的字符的资源前缀,则需要更加谨慎。

          【讨论】:

            猜你喜欢
            • 2018-12-10
            • 2014-12-29
            • 2021-04-17
            • 2017-07-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-25
            • 2011-01-08
            相关资源
            最近更新 更多