gpt4 book ai didi

python-3.x - 如果子字符串重叠,如何计算Python中子字符串的数量?

转载 作者:行者123 更新时间:2023-12-02 18:48:26 25 4
gpt4 key购买 nike

count() 函数返回子字符串在字符串中出现的次数,但在字符串重叠的情况下会失败。

假设我的输入是:

^_^_^-_-

我想知道^_^在字符串中出现了多少次。

mystr=input()
happy=mystr.count('^_^')
sad=mystr.count('-_-')
print(happy)
print(sad)

输出是:

1
1

我期待:

2
1

怎样才能达到预期的效果?

最佳答案

新版本

您无需使用正则表达式编写任何显式循环即可解决此问题。如@abhijith-pk's answer巧妙地建议,您可以仅搜索第一个字符,将其余字符放置在正向前瞻中,这将允许您进行重叠匹配:

def count_overlapping(string, pattern):
regex = '{}(?={})'.format(re.escape(pattern[:1]), re.escape(pattern[1:]))
# Consume iterator, get count with minimal memory usage
return sum(1 for _ in re.finditer(regex, string))

[IDEOne Link]

使用 [:1][1:] 作为索引允许函数处理空字符串而无需特殊处理,同时使用 [0] [1:] 索引不会。

旧版本

您始终可以使用str.find这一事实来编写自己的例程。允许您指定起始索引。这个例程效率不是很高,但应该可以:

def count_overlapping(string, pattern):
count = 0
start = -1
while True:
start = string.find(pattern, start + 1)
if start < 0:
return count
count += 1

[IDEOne Link]

使用

两个版本返回相同的结果。示例用法如下:

>>> mystr = '^_^_^-_-'
>>> count_overlapping(mystr, '^_^')
2
>>> count_overlapping(mystr, '-_-')
1
>>> count_overlapping(mystr, '')
9
>>> count_overlapping(mystr, 'x')
0

请注意,空字符串出现了 len(mystr) + 1 次。我认为这在直觉上是正确的,因为它实际上存在于每个角色之间和周围。

关于python-3.x - 如果子字符串重叠,如何计算Python中子字符串的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49293140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com