如果您匹配的表达式没有任何“高级”特性,比如look-ahead or look-behind,那么您可以自己解析它并构建一个适当的生成器
将regex的每个部分视为返回某物的函数(例如,1到100个数字之间),并在顶部将它们粘在一起:import random
from string import digits, uppercase, letters
def joiner(*items):
# actually should return lambda as the other functions
return ''.join(item() for item in items)
def roll(item, n1, n2=None):
n2 = n2 or n1
return lambda: ''.join(item() for _ in xrange(random.randint(n1, n2)))
def rand(collection):
return lambda: random.choice(collection)
# this is a generator for /\d{1,10}:[A-Z]{5}/
print joiner(roll(rand(digits), 1, 10),
rand(':'),
roll(rand(uppercase), 5))
# [A-C]{2}\d{2,20}@\w{10,1000}
print joiner(roll(rand('ABC'), 2),
roll(rand(digits), 2, 20),
rand('@'),
roll(rand(letters), 10, 1000))
解析正则表达式是另一个问题。所以这个解决方案不是万能的,但也许已经足够了