【问题标题】:Getting data for replacement (python 3.3)获取替换数据(python 3.3)
【发布时间】:2013-08-23 18:49:59
【问题描述】:

例如,我有一个字符串或此类字符串的列表:

text = '000 #-tags-2-7-# 001 002 003 004 05 06 07 08 SDFGSDFG #-tags-3-9-#'
keys = ['key-1', 'key-2', 'key-3', 'key-4', 'key-5', 'key-6', 'key-7', 'key-8', 'key-9', 'key-10']

我需要替换来自keys[randint(2, 7)] 的结果上的#-tags-2-7-# 和keys[randint(2, 7)] 上的#-tags-3-9-# 等。我每次都需要从#- 获取两个整数tags---# 并将其发送到keys[randint(*, *)] 并改为发送结果#-tags---#

【问题讨论】:

    标签: python string replace


    【解决方案1】:

    您可以使用re.sub 将模式r'#-tags-(\d)-(\d)-#' 替换为所需的字符串:

    import re
    import random
    text = '000 #-tags-2-7-# 001 002 003 004 05 06 07 08 SDFGSDFG #-tags-3-9-#'
    keys = ['key-1', 'key-2', 'key-3', 'key-4', 'key-5', 'key-6', 'key-7', 'key-8', 'key-9', 'key-10']
    
    def tag_replace(match):
        start, end = map(int, match.groups())
        return ', '.join(random.sample(keys, random.randint(start, end)))
    
    print(re.sub(r'#-tags-(\d)-(\d)-#', tag_replace, text))
    

    打印(随机结果,例如)

    000 key-8, key-7, key-3 001 002 003 004 05 06 07 08 SDFGSDFG key-9, key-1, key-7, key-3, key-4, key-10, key-6
    

    注意:我认为您希望将 #-tags-3-9-# 替换为来自 keys 的以逗号分隔的 n 项目列表,其中 n = random.randint(3, 9)

    【讨论】:

    • #-tags-3-9-# 表示从“keys”中插入 3 个或 4 个或 5 个 ...或 9 个字符串,并带有分隔符“,”或其他内容。应该以同样的方式处理和替换其他#-tags- - -#
    • 需要以某种方式从“tags”中获取参数,以了解需要从“keys”中获取多少随机字符串
    猜你喜欢
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    相关资源
    最近更新 更多