计算实例的子字符串会显示出来

时间:2016-01-25 18:51:53

标签: python methods count substring

新手程序员参加CS课程。在Ubuntu 14.04中使用Python 2.7和HPmini(Atom处理器)笔记本电脑。 'ana'中有多少 “加拿大的香蕉分析”找到的结果应该是 4 而不是3,香蕉有2个'ana'实例”。 // f.find()会给我索引,没有好处。 有没有办法在for循环中切片搜索循环,例如: if i [n:n + 4] =='ana':?因此,在每次迭代时,它会向前看3个字符并进行测试'blah =='ana'://需要哪些方法。提前感谢您对此进行调查。不需要确切的答案只是想法。 我现在/最近的代码是:

Hedge Funds - 18.1%

4 个答案:

答案 0 :(得分:2)

Re“不需要确切的答案只是想法”,你想要的是正则表达式(“Import re”)使用lookahead。

或者你当然可以这样做:

for i in range(lenG - len(b)):
    if g[i:i + len(b)] == b:

(我只想使用正则表达式。: - ))

答案 1 :(得分:2)

使用<!--HTML--> <button>Try Me!</button>.count的问题是您找不到重叠的字符串:

.find

您可以这样做:

>>> "banana".find("ana")
1
>>> "banana".count("ana")
1

或者,更一步一步:

>>> g="Canada's bananas analysis"
>>> sub_string="ana"
>>> [1 for i in range(0, len(g)-len(sub_string)) if g[i:i+len(sub_string)]==sub_string] 
[1, 1, 1, 1]

答案 2 :(得分:1)

如果我自己编写程序,我会使用find() str对象的<string_name>.find(substring [, index]) 方法。它的语法是:

index

其中idx <- 0 # start from the beginning of the string count <- 0 # number of matches while True: idx <- index_of_next_match # returned by the find() method check_idx() # check return value of find() if idx_is_OK: idx++ # otherwise find() returns always the same match count++ else: break 是从开始搜索的字符的(可选)索引,返回值是第一个匹配的索引(如果没有匹配则为-1)。

因此,一个简单的算法可能是:

{{1}}

答案 3 :(得分:1)

我想我会用正则表达式做到这一点。诀窍是,为了捕获重叠匹配,你必须使用前瞻断言而不是常规匹配。对于此示例,它将如下所示:

src="Canada's bananas analysis"
x = re.compile(r'(?=ana)', re.IGNORECASE)
f = x.findall(src)
print len(f)

4