我在处理Python Challenge时遇到了这个问题。准确地说是10号。我决定尝试使用正则表达式来解决它 - 提取重复序列,计算它们的长度,然后构建序列中的下一个项目。
所以我开发的正则表达式是:'(\d)\1*'
它在在线regex tester上运行良好,但是在我的脚本中使用它时,它的表现并不相同:
regex = re.compile('(\d)\1*')
text = '111122223333'
re.findall(regex, text)
> ['1', '1', '1', '1', '2', '2', '2',...]
等等等等。所以我在 Python 的 re 模块中了解了原始类型。这是我的第一个问题:有人可以解释一下这到底是做什么的吗?该文档将其描述为减少了转义反斜杠的需要,但它似乎不是更简单的正则表达式所必需的\d+
,我不明白为什么。
所以我将我的正则表达式更改为r'(\d)\1*'
,现在尝试使用findall()
来制作序列列表。我得到
> ['1', '2', '3']
又很迷茫。我还是不明白这一点。请帮忙?
我决定这样做来解决这个问题:
[m.group() for m in regex.finditer(text)]
> ['1111', '2222', '3333']
并得到我一直在寻找的东西。然后,基于这个线程,我尝试findall()
在整个 regex -> 中添加一个组r'((\d)\2*)'
。我最终得到:
> [('1111', '1'), ('2222', '2'), ('3333', '3')]
在这一点上,我很困惑。我知道这个结果与多个组有关,但我不确定。
另外,这是我第一次发帖,如果我的礼仪不正确,我深表歉意。请随时纠正我。谢谢!