问题描述
我正在尝试在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)
1楼
您可以使用以下技巧来执行字符串插值以解决该问题。
myphrase = "hello bob"
pattern = r'\b{var}\b'.format(var = myphrase)
2楼
您可以使用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"