Ответ 1
Функция
def findOccurences(s, ch):
return [i for i, letter in enumerate(s) if letter == ch]
findOccurrences(yourString, "|")
вернет список индексов вашейString, в котором | происходят
Я пытаюсь найти все вхождения "|" в строке.
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
Функция
def findOccurences(s, ch):
return [i for i, letter in enumerate(s) if letter == ch]
findOccurrences(yourString, "|")
вернет список индексов вашейString, в котором | происходят
если вы хотите, чтобы индекс всей видимости символа |
в строке вы могли сделать это
In [30]: import re
In [31]: str = "aaaaaa|bbbbbb|ccccc|dddd"
In [32]: [x.start() for x in re.finditer('\|', str)]
Out[32]: [6, 13, 19]
также вы можете сделать
In [33]: [x for x, v in enumerate(str) if v == '|']
Out[33]: [6, 13, 19]
Здесь легко использовать регулярные выражения;
import re
def findSectionOffsets(text):
for m in re.finditer('\|', text):
print m.start(0)
text.find
возвращает целое число (индекс, в котором найдена нужная строка), поэтому вы можете запускать цикл для него.
Я предлагаю:
def findSectionOffsets(text):
indexes = []
startposition = 0
while True:
i = text.find("|", startposition)
if i == -1: break
indexes.append(i)
startposition = i + 1
return indexes
text.find() возвращает только первый результат, а затем вам нужно установить новую начальную позицию на основе этого. Так вот так:
def findSectionOffsets(text):
startingPos = 0
endPos = len(text)
position = text.find("|", startingPos, endPos):
while position > -1:
print position
startingPos = position + 1
import re
def findSectionOffsets(text)
for i,m in enumerate(re.finditer('\|',text)) :
print i, m.start(), m.end()