在旧版本的python中使模式匹配工作

时间:2012-09-12 09:09:39

标签: python list jython

考虑以下代码:

searchList=["hello", "hello world", "world"]
pattern = 'hell'
matchingList = [t for t in searchList if re.match(pattern, t)]

以上代码在Jython 2.4.3中运行正常但在Jython的较低版本中失败并出现此错误:

ValueError: iterator indices must be consecutive ints starting at 0

有任何解决方法吗?

通过以下解决方法,我得到同样的错误:

  for t in searchList:
      if re.match(pattern, t):
          matchingList.append(t)

在Jython 2.1中看到错误

2 个答案:

答案 0 :(得分:3)

代码在cpython 2.3.5,2.2.3,2.1.3和2.0以及jython 2.2.1,2.2和2.1上运行良好。 List comprehensions are only available in 2.0+。相反,你可以写:

# Warning: This code is unnecessarily complex because of cpython 1.x (!) support
import re
searchList=["hello", "hello world", "world"]
pattern = 'hell'
matchingList = []
for t in searchList:
    if re.match(pattern, t):
        matchingList.append(t)

话虽如此,甚至2.4都是古老的并且已经有一段时间不受支持了(这意味着您必须手动应用并调整所有安全补丁,从而拥有一个安全的系统)。你正在迎合的Python版本已经超过十年了,并且几乎肯定充斥着安全漏洞。考虑弃用Python 2.5及更早版本。

答案 1 :(得分:0)

经过大量调试后,我发现当您尝试第二次迭代同一列表时会出现问题。这个问题已在此报道:

http://bugs.jython.org/issue1544224

我使用了上面链接中提到的解决方法,它运行正常。

非常感谢,伙计们