gpt4 book ai didi

python - 您认为您了解 Python RE 吗?这是一个挑战

转载 作者:行者123 更新时间:2023-11-30 22:36:08 25 4
gpt4 key购买 nike

这里是最简单的:如何使字符集与之前捕获的字符不匹配?

r'(.)[^\1]' # doesn't work

这是呃……胖子?它是(简单)加密程序的一部分。假设“hobo”被编码为“fxgx”。该程序仅获取编码文本,并且必须计算它可能是什么,因此它生成模式:

r'(.)(.)(.)\2' # 1st and 3rd letters *should* be different!

现在它(正确地)匹配“hobo”,但也匹配“hoho”(想想看!)。我尝试过类似的东西:

r'(.)([^\1])([^\1\2])\2' # also doesn't work

许多变体,但是唉!唉……

请帮忙!

附注解决方法(我必须实现)是只检索“hobo”以及“hoho”,然后过滤结果(丢弃“hoho”),如果你明白我的意思;)

P.P.S现在我想要一个hoho

VVVVV答案VVVVV

是的,我重新重新阅读了文档,它确实说:

Inside the '[' and ']' of a character class, all numeric escapes are treated as characters.

以及:

Special characters lose their special meaning inside sets.

这几乎意味着(我认为)不,你不能做这样的事情:

re.compile(r'(.)[\1]') # Well you can, but it kills the back-reference!

感谢您的帮助!

最佳答案

1st and 3rd letters should be different!

使用正则表达式(不仅仅是 python 的实现)无法检测到这一点。更具体地说,如果没有内存,就无法使用自动机来检测它。您必须使用不同类型的自动机。

您试图发现的语法类型(重复)是不规则的。此外,它不是上下文无关的。

自动机 是一种让正则表达式匹配如此高效的机制。

关于python - 您认为您了解 Python RE 吗?这是一个挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44299548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com