Python 计算字符串中字符串的重叠出现次数

Python 计算字符串中字符串的重叠出现次数,python,string,Python,String,我想计算字符串中字符串的重叠出现次数 import re def function(string, sub_string): match = re.findall('(?='sub_string')',string) return len(match) 它显示语法错误: File "solution.py", line 3 return len(re.findall('(?='sub_string')',string))

我想计算字符串中字符串的重叠出现次数

import re
def function(string, sub_string):
    match = re.findall('(?='sub_string')',string)
    return len(match)
它显示语法错误:

File "solution.py", line 3
    return len(re.findall('(?='sub_string')',string))
                                        ^
SyntaxError: invalid syntax. 
但是如果我写

import re
def function(string, sub_string):
    match = re.findall('(?='+sub_string+')',string)
    return len(match)

那就好了。为什么我需要在两侧都包含+呢?

这就是Python中字符串连接的工作方式

您在这里所做的
(?='+sub_string+')
是,例如
sub_string='hello'

”(?=“+”你好“+”)”

如果没有连接运算符,变量在两个字符串之间就没有位置

在Python3.6中,您可以使用f字符串,只需使用一个字符串——我可能会在这里这样做:


f”(?={sub_string})

+
用于串接字符串。如果要串接
sub_string
末尾的右括号,需要使用
+
,因为python是这样理解的。这个问题与正则表达式无关,只与字符串串接的工作方式有关。简言之,如果您指定了一个变量,则可以在不使用
+
的情况下将字符串相互追加。在表达式中,需要使用
+
。可能会有一些极端情况,但根据经验,只需使用
+
并明确说明您正在做什么。@WiktorStribiżew,谢谢如果您提供了字符串连接的替代方法,则无需这样做。例如,您可以使用字符串格式化工具将模式保持为一个字符串:
re.findall(('(?={})'.format(sub_string)),string)