python在字符串中查找子字符串

python在字符串中查找子字符串,python,regex,string,substring,Python,Regex,String,Substring,我试图在python中查找字符串中子字符串的出现次数。但我需要我的搜索非常具体。在搜索子字符串之前,我删除了所有标点: myString.translate(无、字符串、标点符号) 现在我搜索子字符串。如果我正在搜索子字符串“hello bob”,并且在搜索的字符串中,我会有文本“hello bob其他内容”或“hello bob”以及其他一些文本。当我删除标点符号时,两个字符“-”不会被删除,因为它们是非unicode字符,因此上述两个字符串不应算作单词“hello bob”的出现 我使用下面

我试图在python中查找字符串中子字符串的出现次数。但我需要我的搜索非常具体。在搜索子字符串之前,我删除了所有标点:

myString.translate(无、字符串、标点符号)

现在我搜索子字符串。如果我正在搜索子字符串“hello bob”,并且在搜索的字符串中,我会有文本“hello bob其他内容”或“hello bob”以及其他一些文本。当我删除标点符号时,两个字符“-”不会被删除,因为它们是非unicode字符,因此上述两个字符串不应算作单词“hello bob”的出现

我使用下面的正则表达式代码试图获得正确的出现次数,在大文件(3000行或更多)中,我开始无法获得正确的单词出现次数

counter = 0
searcher = re.compile("hello bob" + r'([^\w-]|$)').search
with open(myFile, 'r') as source:
    for line in source:
        if searcher(line):
            counter += 1
我还试过别的东西

我正在尝试使用findAll函数,因为到目前为止,它为我输入的单词提供了正确的出现次数

我在stackoverflow上找到了这个:

re.findall(r'\bword\b',read)

我是否可以用变量代替单词

例如,我想使用:

myPhrase = "hello bob"
re.findall(r'\bmyPhrase\b', read)
应与以下内容相同:

re.findall(r'\bhello bob\b', read)

可以使用以下技巧执行字符串插值来解决此问题

myphrase = "hello bob"
pattern = r'\b{var}\b'.format(var = myphrase)

您可以使用
re.escape(myPhrase)
进行变量替换

read = "hello bob ! how are you?"
myPhrase = "hello bob"
my_regex = r"\b" + re.escape(myPhrase) + r"\b"

counter = 0
if re.search(my_regex, read, re.IGNORECASE):
    counter += 1
else:
    print "not found"

给出一个输入和预期输出的示例。在re.findAll()@juanpa.arrivillaga上查找信息这将非常困难,因为上面的代码在大多数情况下都可以工作,但在大文件(3000行或更多)上失败@tallcuck你能举个例子吗?@memoryManagers你需要正确解释这句话。现在有点模糊了:“我有文本“hello bob其他东西”或“hello bob’”,那么这两个实例不应该被计算在内,因为删除标点符号不会删除这些符号,因为它们是非unicode字符,删除标点符号后的结果字符串不会是“hello bob”,也不会是子字符串“hello bob”“不需要区分大小写。”