Python 如何定义与特定RegExp匹配的所有二进制字符串的列表?
我有一个正则表达式,它匹配一些二进制字符串。如何创建一个生成器表达式来定义此正则表达式接受的所有字符串的列表 请找到伪代码Python 如何定义与特定RegExp匹配的所有二进制字符串的列表?,python,regex,binary,Python,Regex,Binary,我有一个正则表达式,它匹配一些二进制字符串。如何创建一个生成器表达式来定义此正则表达式接受的所有字符串的列表 请找到伪代码 pattern = re.compile("^(001|010|100){5}$") #accepts {001100001001001, 100100100001001,...} but not accepts {000000000000000,111111111111111,...} def infinite_sequence(): num
pattern = re.compile("^(001|010|100){5}$") #accepts {001100001001001, 100100100001001,...} but not accepts {000000000000000,111111111111111,...}
def infinite_sequence():
num = 000000000000000
while True:
yield num
num += 1
good_binary_strings = [x for x in infinite_sequence() if re.match(pattern, x)]
我对尽可能高效的代码感兴趣。字符串的真正子集是巨大的。您修改的代码(假设所有长度=15个二进制字符串):
重新导入
pattern=re.compile(“^(001 | 010 | 100){5}$”)#接受{0011000001001,1001001001000001001,…}但不接受{000000000000000 111111111111,…}
def无限_序列():
num=0
而num您修改的代码(假设所有长度=15个二进制字符串):
重新导入
pattern=re.compile(“^(001 | 010 | 100){5}$”)#接受{0011000001001,1001001001000001001,…}但不接受{000000000000000 111111111111,…}
def无限_序列():
num=0
尽管Jan Stránský目前接受的答案num生成了32767个不同的字符串,这还不算太糟糕,但您可以直接生成“好”字符串,这在您的真实数据集中可能很重要:
from itertools import product
good_binary_strings = [''.join(x) for x in product(['001', '010', '100'], repeat=5)]
print(len(good_binary_strings))
Jan Stránský目前接受的答案生成了32767个不同的字符串,这还不算太糟糕,但您可以直接生成“好”字符串,这在您的真实数据集中可能很重要:
from itertools import product
good_binary_strings = [''.join(x) for x in product(['001', '010', '100'], repeat=5)]
print(len(good_binary_strings))
一种简单的方法:生成一个二进制字符串列表并过滤通过测试的字符串如何尽可能高效地编写此简单代码我认为这(从伪代码转换为实际代码)是非常理想的。。一般情况下,您必须测试所有选项。一种简单的方法:生成二进制字符串列表并过滤通过测试的字符串。如何尽可能高效地编写此简单代码我认为这(从伪代码转换为实际代码)是非常理想的。。对于一般情况,您必须测试所有选项。。