你知道你是谁吗?这是一个挑战

2024-06-01 19:02:34 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是“瘦肉精”:如何使角色集与以前捕获的角色不匹配?你知道吗

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”)

现在我想要一个hoho

答案

是的,我重新阅读了文档,上面写着:

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!

谢谢你的帮助!你知道吗


Tags: andthe方法文本程序角色密码编码
1条回答
网友
1楼 · 发布于 2024-06-01 19:02:34

1st and 3rd letters should be different!

这不能用正则表达式(不仅仅是python的实现)检测到。更具体地说,使用没有内存的自动机是检测不到的。你得用另一种自动机。你知道吗

你试图发现的那种语法(重叠)是不规则的。此外,它不是上下文无关的。你知道吗

自动机是使正则表达式匹配如此有效的机制。

相关问题 更多 >