Python中正则表达式与字符串的对应关系

2024-09-26 18:12:16 发布

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

我需要在Python中使用一个函数,它接受两个字符串(a, b)和一个对应规则列表,即字符串对(a[i], b[i]),并检查是否可以将a拆分成部分,根据对应规则替换每个部分并得到b。问题是规则可能有点纠结:

  1. 可能有(a, b)(a, c)

  2. 比如(aa, b)和{}

  3. 比如(ab, d)和{}

  4. 它是对应关系,而不是替换(a不能左a或先转换为b,然后再转换为c)。

如果{cd21>,那么^{cd21}是

有没有一种方法可以使用standartregex库的Python或其他一些常见的正则表达式实现来实现它?我可以用蛮力来做,但是如果要检查很多对的话,效果会很差。在


Tags: 方法函数字符串列表ab关系规则aa
1条回答
网友
1楼 · 发布于 2024-09-26 18:12:16

(为了避免英语完全混淆,我将把你的对应对中的元素称为“keys”和“values”,即使重复的键阻止它们组成一个典型的dict。)

我相信有几个原因不能单独使用正则表达式来实现这一点。在

问题1。regex不是映射

正则表达式无法将由某些键序列组成的字符串与其转换为值相关联。对于初学者来说,re函数需要访问您的键值对列表,如果只是这样它就可以告诉您匹配中出现了哪些键。在

问题2:不明确的匹配

正则表达式可以通过两种方式来处理不明确的匹配,例如:

re.findall(r'(a|aa|aaa)*', 'aaaa')

问题是,对于任何给定的regex,您只能从中选择一个。你的问题需要跟踪哪个选项匹配,以什么顺序,每个匹配多少次。在

更糟的是,你的问题需要知道所有可能的组合,这些选择匹配。但是,一旦正则表达式确定'aaaa'匹配任何重复,比如'a' + 'a' + 'a' + 'a',它就完成了-match-found。在

但你还没完成。您仍然需要测试所有其他匹配项,如'a' + 'a' + 'aa''a' + 'aa' + 'a'、和{},并且。。。测试这些将导致多个不同的值组合粘在一起,并与您的第二个参数进行比较。你不能跳过它们。在

一次勇敢但注定失败的尝试

我创建了一个regex构建函数,它可以为一组键值对标识有效的输入和输出字符串。不幸的是,这并没有说明给定的输入字符串是否能够实际产生特定的输出。在

^{pr2}$

这可以很快(?)排除不可能的输入或输出字符串,但它不能真正解决您的问题,如果有足够的回溯,它甚至不会很快。在

坚持使用for循环。在

相关问题 更多 >

    热门问题