36

我试图找到所有出现的“|” 在一个字符串中。

def findSectionOffsets(text):
    startingPos = 0
    endPos = len(text)

    for position in text.find("|",startingPos, endPos):
        print position
        endPos = position

但我收到一个错误:

    for position in text.find("|",startingPos, endPos):
TypeError: 'int' object is not iterable
4

7 回答 7

62

功能:

def findOccurrences(s, ch):
    return [i for i, letter in enumerate(s) if letter == ch]


findOccurrences(yourString, '|')

yourString将返回发生的索引列表|

于 2012-10-22T10:50:28.743 回答
13

如果你想要|一个字符串中所有出现的字符的索引,你可以这样做

import re
str = "aaaaaa|bbbbbb|ccccc|dddd"
indexes = [x.start() for x in re.finditer('\|', str)]
print(indexes) # <-- [6, 13, 19]

你也可以

indexes = [x for x, v in enumerate(str) if v == '|']
print(indexes) # <-- [6, 13, 19]
于 2012-10-22T10:45:00.953 回答
2

这里使用正则表达式更容易;

import re

def findSectionOffsets(text):
    for m in re.finditer('\|', text):
        print m.start(0)
于 2012-10-22T10:56:39.523 回答
2
import re
def findSectionOffsets(text)
    for i,m in enumerate(re.finditer('\|',text)) :
        print i, m.start(), m.end()
于 2012-10-22T10:57:41.657 回答
1

text.find返回一个整数(找到所需字符串的索引),因此您可以对其运行 for 循环。

我建议:

def findSectionOffsets(text):
    indexes = []
    startposition = 0

    while True:
        i = text.find("|", startposition)
        if i == -1: break
        indexes.append(i)
        startposition = i + 1

    return indexes
于 2012-10-22T10:48:03.373 回答
1

text.find() 仅返回第一个结果,然后您需要根据该结果设置新的起始位置。所以像这样:

def findSectionOffsets(text):
    startingPos = 0

    position = text.find("|", startingPos):
    while position > -1:
        print position
        startingPos = position + 1
        position = text.find("|", startingPos)
于 2012-10-22T10:48:24.487 回答
1

如果text是您想要计算它包含多少的字符串"|",则以下代码行将返回计数:

len(text.split("|"))-1

注意:这也适用于搜索子字符串。

于 2018-08-30T07:26:25.417 回答