我需要在Python中使用一个函数,它接受两个字符串(a, b)
和一个对应规则列表,即字符串对(a[i], b[i])
,并检查是否可以将a
拆分成部分,根据对应规则替换每个部分并得到b
。问题是规则可能有点纠结:
可能有(a, b)
和(a, c)
比如(aa, b)
和{
比如(ab, d)
和{
它是对应关系,而不是替换(a
不能左a
或先转换为b
,然后再转换为c
)。
如果{cd21> 有没有一种方法可以使用standartregex库的Python或其他一些常见的正则表达式实现来实现它?我可以用蛮力来做,但是如果要检查很多对的话,效果会很差。在
(为了避免英语完全混淆,我将把你的对应对中的元素称为“keys”和“values”,即使重复的键阻止它们组成一个典型的
dict
。)我相信有几个原因不能单独使用正则表达式来实现这一点。在
问题1。regex不是映射
正则表达式无法将由某些键序列组成的字符串与其转换为值相关联。对于初学者来说,
re
函数需要访问您的键值对列表,如果只是这样它就可以告诉您匹配中出现了哪些键。在问题2:不明确的匹配
正则表达式可以通过两种方式来处理不明确的匹配,例如:
问题是,对于任何给定的regex,您只能从中选择一个。你的问题需要跟踪哪个选项匹配,以什么顺序,每个匹配多少次。在
更糟的是,你的问题需要知道所有可能的组合,这些选择匹配。但是,一旦正则表达式确定
'aaaa'
匹配任何重复,比如'a' + 'a' + 'a' + 'a'
,它就完成了-match-found。在但你还没完成。您仍然需要测试所有其他匹配项,如},并且。。。测试这些将导致多个不同的值组合粘在一起,并与您的第二个参数进行比较。你不能跳过它们。在
'a' + 'a' + 'aa'
、'a' + 'aa' + 'a'
、和{一次勇敢但注定失败的尝试
我创建了一个regex构建函数,它可以为一组键值对标识有效的输入和输出字符串。不幸的是,这并没有说明给定的输入字符串是否能够实际产生特定的输出。在
^{pr2}$这可以很快(?)排除不可能的输入或输出字符串,但它不能真正解决您的问题,如果有足够的回溯,它甚至不会很快。在
坚持使用
for
循环。在相关问题 更多 >
编程相关推荐