当前位置: 代码迷 >> python >> python在字符串中查找子字符串
  详细解决方案

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

热度:116   发布时间:2023-06-13 15:32:17.0

我正在尝试在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"