web-dev-qa-db-fra.com

Trouver toutes les occurrences d'un caractère dans une chaîne

J'essaie de trouver toutes les occurrences de "|" dans une ficelle.

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

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

Mais je reçois une erreur:

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

La fonction: 

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


findOccurrences(yourString, '|')

renverra une liste des index de yourString dans lesquels le | apparaît.

39
Marco L.

si vous voulez un index de toutes les occurrences de | caractères dans une chaîne, vous pouvez le faire

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]

aussi tu peux faire 

In [33]: [x for x, v in enumerate(str) if v == '|']
Out[33]: [6, 13, 19]
11
avasal

Il est plus facile d'utiliser des expressions régulières ici.

import re

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

text.find renvoie un entier (l'index auquel se trouve la chaîne souhaitée), vous pouvez donc exécuter une boucle dessus.

Je suggère:

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

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

    return indexes
1
samfrances

text.find () ne renvoie que le premier résultat. Vous devez ensuite définir la nouvelle position de départ en fonction de cela. Alors comme ça:

def findSectionOffsets(text):
    startingPos = 0

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

Si text est la chaîne dans laquelle vous voulez compter le nombre de "|" qu'il contient, la ligne de code suivante renvoie le nombre:

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

Remarque: Cela fonctionnera également pour la recherche de sous-chaînes.

0
Pablo Reyes