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 に答える