Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字符串中随机选择_Python_String_Templates_Random_Choice - Fatal编程技术网

Python 从字符串中随机选择

Python 从字符串中随机选择,python,string,templates,random,choice,Python,String,Templates,Random,Choice,假设我有一个字符串,比如: data = '''Random digits: (1|2|3), (4|5|6), (7|8|9).''' 如何获得如下输出: Random digits: 1, 6, 7. 或 所以我们的想法是随机选择每个元素。(| |)可能超过3。 谢谢你的忠告 从你的例子中可以看出。更复杂的版本将在“(”和“)”上拆分,然后在“|”上拆分 from random import choice data = '''Random digits: (1|2|3), (4|5|6)

假设我有一个字符串,比如:

data = '''Random digits: (1|2|3), (4|5|6), (7|8|9).'''
如何获得如下输出:

Random digits: 1, 6, 7.

所以我们的想法是随机选择每个元素。(| |)可能超过3。
谢谢你的忠告

从你的例子中可以看出。更复杂的版本将在“(”和“)”上拆分,然后在“|”上拆分

from random import choice
data = '''Random digits: (1|2|3), (4|5|6), (7|8|9).'''
print "Random digits: " + choice(data[16:21:2]) + ", " + choice(data[25:30:2]) + ", " + choice(data[34:39:2])

使用替换功能尝试
re.sub

import re, random

def rand_replace(m):
    return random.choice(m.group(1).split('|'))

data = '''Random digits: (1|2|3), (4|5|6), (7|8|9).'''    
print re.sub(r'\((.+?)\)', rand_replace, data)
这也适用于非数字字符串,如“(nice | good)(day | night)”。如果要具体说明,请使用以下正则表达式:

r'\(([\d|]+)\)'
只接受数字和管道。

类似以下内容:

import re
import random

data = '''Random digits: (1|2|3), (4|5|6), (7|8|9).'''

random_digits = list()
for group in (m.strip('()').split('|') for m in re.findall(r'\([\d\|]+\)', data)):
    random_digits.append(random.choice(group))

print 'Random digits: ' + ', '.join(random_digits)
试一试:

>>> get_rc(test)
['2', '5', '9']
>>> get_rc(test)
['1', '4', '7']
>>> get_rc(test)
['1', '6', '7']
>>> get_rc(test)
['3', '5', '8']
>>> get_rc(test)
['1', '6', '9']
>>> get_rc(test)
['1', '4', '8']
>>> get_rc(test)
['2', '4', '9']
大多数蟒蛇:

def get_rc2(data):
    return [ choice(re.findall("[0-9]+",i)) for i in data.split(",") ]
如果要将整数而不是数字作为字符串返回:

def get_rc2(data):
    return [ int(choice(re.findall("[0-9]+",i))) for i in data.split(",") ]

我不知道怎么做。我知道我需要使用random.choice()和一些iRetools。我不知道更复杂的情况是否适合使用正则表达式(既不太简单也不太困难)。现在我要重读python文档。非常感谢。
def get_rc2(data):
    return [ choice(re.findall("[0-9]+",i)) for i in data.split(",") ]
def get_rc2(data):
    return [ int(choice(re.findall("[0-9]+",i))) for i in data.split(",") ]