首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3正则逃逸函数

Python3正则逃逸函数
EN

Stack Overflow用户
提问于 2018-04-18 19:07:48
回答 2查看 109关注 0票数 2

因此,我得到了一个可变长度的数字字符串,我需要使用该字符串中的数字找到所有可能的数字组合,其中只有中间的数字可能被更改,例如:

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

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

我认为使用python的re.escape函数是可能的,这就是我所做的:

代码语言:javascript
复制
#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

我需要反馈,我的方法有意义吗?这个任务是可以用regex完成的还是我需要另一种方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-18 19:59:52

我想,就像狼猫说的那样,用itertools.product函数来做这件事。类似于这样的代码:

代码语言:javascript
复制
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)]
票数 3
EN

Stack Overflow用户

发布于 2018-04-18 20:00:28

这里有一个使用迭代工具的解决方案,可能不是最复杂的,但它有效:

代码语言:javascript
复制
>>> 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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49907285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档