查找字符串中所有出现的字符

时间:2012-10-22 10:39:21

标签: python 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

7 个答案:

答案 0 :(得分:41)

功能:

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


findOccurrences(yourString, '|')

将返回yourString出现的|索引列表。

答案 1 :(得分:12)

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

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]

答案 2 :(得分:2)

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

import re

def findSectionOffsets(text):
    for m in re.finditer('\|', text):
        print m.start(0)

答案 3 :(得分:2)

import re
def findSectionOffsets(text)
    for i,m in enumerate(re.finditer('\|',text)) :
        print i, m.start(), m.end()

答案 4 :(得分:1)

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

答案 5 :(得分:1)

text.find()只返回第一个结果,然后你需要根据它设置新的起始位置。像这样:

def findSectionOffsets(text):
    startingPos = 0

    position = text.find("|", startingPos):
    while position > -1:
        print position
        startingPos = position + 1
        position = text.find("|", startingPos)

答案 6 :(得分:0)

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

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

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