1

在这里必须有一种更简单的方法或功能来执行此代码:

    #!/usr/bin/env python

    string = "test [*string*] test [*st[ *ring*] test"

    points = []

    result = string.find("[*")
    new_string = string[result+1:]

    while result != -1:
      points.append(result)
      new_string = new_string[result+1:]
      result = new_string.find("[*")

    print points

有任何想法吗?

4

3 回答 3

3
  import re
  string = "test [*string*] test [*st[ *ring*] test"

  points = [m.start() for m in re.finditer('\[', string)]
于 2012-06-20T07:22:50.547 回答
0

看起来您正在尝试获取字符串中匹配的索引'[*'...

indices=[i for i in range(len(string)-1) if string[i:i+2] == '[*']

但是此输出与您的代码将产生的不同。您能否验证您的代码是否符合您的要求?

另请注意,这string是标准库中 python 模块的名称——虽然它不经常使用,但最好避免将其用作变量名。(也不要使用str

于 2012-06-20T07:22:59.630 回答
0
>>> indexes = lambda str_, pattern: reduce(
...    lambda acc, x: acc + [acc[-1] + len(x) + len(pattern)],
...    str_.split(pattern), [-len(pattern)])[1:-1]
>>> indexes('123(456(', '(')
[3, 7]
>>> indexes('', 'x')
[]
>>> indexes("test [*string*] test [*st[ *ring*] test", '[*')
[5, 21]
>>> indexes('1231231','1')
[0, 3, 6]
于 2012-06-20T07:38:13.337 回答