新手程序员参加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%
答案 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