Python3正则表达式转义函数

时间:2018-04-18 19:07:48

标签: python regex python-3.x

所以我给了一串可变长度的数字,我需要使用该字符串中的数字找到所有可能的数字组合,其中只有两者之间的数字可以改变,例如:

如果给予 123 ,我需要找到 1x2y3的组合,其中x,y是任意数字

如果给我 5312 ,我需要找到 5a3b1c2的组合,其中a,b,c是任意数字

我认为使用python的re.escape函数可以实现这一点,这就是我的意思:

#Given the digits '123' from STDIN

#create a string "1\d2\d3"
my_regex_string = '\d'.join(input().split())

#Set x as starting point, set y as limit (not the most efficient)
x = 10**(len(my_regex_string)-1) * int(my_regex_string[0])
y = 10**(len(my_regex_string)-1) * (int(my_regex_string[0]) + 1)

while x < y:
    if bool(re.match(re.escape(p), str(x)))
        print(x)
    x+=1

我需要反馈,我的方法有意义吗?这个任务是否可以使用正则表达式,还是需要另一种方法?

2 个答案:

答案 0 :(得分:3)

我认为,就像wolfrevokcats所说的那样,这样做的pythonic方法是使用itertools.product函数。类似这样的代码:

from itertools import product

s = input()
r = "{}".join(list(s))
c = [int(r.format(*f)) for f in product(range(0,10), repeat=len(s)-1)]

答案 1 :(得分:1)

这是一个使用itertools的解决方案,可能不是最复杂的,但它可以工作:

>>> import itertools
>>> x = map(lambda z: [s[i] + str(z[i]) for i in range(len(s)-1)] + [s[-1]], list(itertools.product(range(10), repeat=len(s)-1)))
>>> y = map(lambda z: "".join(z), x)
>>> list(y)