Python - 如何在字符串中包含任何随机整数

Posted

技术标签:

【中文标题】Python - 如何在字符串中包含任何随机整数【英文标题】:Python - How to include any random integer in a string 【发布时间】: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) 中的任何数字。我该怎么做?

【问题讨论】:

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

【讨论】:

以上是关于Python - 如何在字符串中包含任何随机整数的主要内容,如果未能解决你的问题,请参考以下文章

如何在分类中包含单词作为数字特征

在 SQL 请求中,如何查找字符串最后一部分中包含数字的所有记录(最后一个空格之后)

如果 Json 变量在 WCF 中包含空格或任何特殊字符,如何获取 Json 值

如何从机器人框架中包含字符串和字符串类型数字的字符串变量中仅检索整数

Python 3,如果列表中包含特定的东西,如何删除部分元素3 [重复]

python中编写一个模块,模块中包含随机生成N个元素的列表、排序列表、求最大