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(",") ]