我正在使用Project Euler问题51,我正试图通过搜索素数列表来解决它。我已经开始尝试找到候选示例(56003)。
我已将问题简化为:首先将注意力限制在具有一定数字位数的素数上。 F.ex.我首先看一下数组中的5位素数。
用 ABCDE 表示素数。只需替换一位数: * BCDE 会产生5C1 = 5个模式候选: A * CDE 等。替换两位数: ** CDE 给出升至5C2 = 10个模式候选者。等等取代4位数:**** E,产生5C4模式候选。
举个例子,我有这个数字列表
s = ['55967', '56003', '56113', '56081', '56333', '56093', '58091']
并说我想搜索 AB ** E 模式:然后我希望搜索功能找到:56003,56113和5633。
我的问题是我不知道如何做到这一点。我已经阅读了一些关于正则表达式的内容,但结论是RE只会让我的大脑受伤。
谢谢
答案 0 :(得分:1)
以下正则表达式代码段适用于您的问题。
import re
s = ['55967', '56003', '56113', '56081', '56333', '56093', '58091']
patt_s = re.compile('(56\d\d3)')
for s_nr in s:
matched_re = re.search(patt_s, s_nr)
if matched_re:
print matched_re.group(0)
输出: 56003 56113 56333 56093
但是,您需要阅读正则表达式并尝试简单的表达式或修改上面的表达式来自定义其他情况!至少它们在许多不同的语言中大致相同。