确定Python中字符串中出现子字符串的次数

use*_*377 55 python string python-2.7 python-3.x

我想弄清楚字符串中出现字符串的次数.例如:

nStr = '000123000123'
Run Code Online (Sandbox Code Playgroud)

假设我想要找到的字符串是123.显然它在nStr中出现了两次但是我在将这个逻辑实现到Python时遇到了麻烦.我现在得到的是:

pattern = '123'
count = a = 0
while pattern in nStr[a:]:
    a = nStr[a:].find(pattern)+1
    count += 1
return count
Run Code Online (Sandbox Code Playgroud)

它应该返回的答案是2.我现在陷入无限循环.

我刚才意识到数量是一个更好的方法,但出于好奇,有没有人看到类似于我已经得到的方法呢?

Ash*_*ary 82

用途str.count:

>>> nStr = '000123000123'
>>> nStr.count('123')
2
Run Code Online (Sandbox Code Playgroud)

代码的工作版本:

nStr = '000123000123'
pattern = '123'
count =0
flag=True
start=0
while flag:
    a = nStr.find(pattern,start)  # find() returns -1 if the word is not found, 
                                  #start i the starting index from the search starts(default value is 0)
    if a==-1:          #if pattern not found set flag to False
        flag=False
    else:               # if word is found increase count and set starting index to a+1
        count+=1        
        start=a+1
print(count)
Run Code Online (Sandbox Code Playgroud)


Joã*_*sce 21

count()这里显示的问题和这些方法是重叠子串的情况.

例如:"aaaaaa".count("aaa")返回2

如果你想让它返回4 [ (aaa)aaa, a(aaa)aa, aa(aaa)a, aaa(aaa)]你可能会尝试这样的事情:

def my_count(string, substring):
    string_size = len(string)
    substring_size = len(substring)
    count = 0
    for i in xrange(0,string_size-substring_size+1):
        if string[i:i+substring_size] == substring:
            count+=1
    return count

my_count("aaaaaa", "aaa")
# 4
Run Code Online (Sandbox Code Playgroud)

不知道是否有更好的方法,但发布只是为了澄清方式count()有效.

  • 请注意,在Python 3中xrange()被重命名为range()。 (2认同)

小智 6

import re

pattern = '123'

n =re.findall(pattern, string)
Run Code Online (Sandbox Code Playgroud)

我们可以说子串'pattern'在'string'中出现len(n)次.