有没有一种方法可以使用re.findall
或其他正则表达式方法以指定顺序计算单词的出现次数,并以任意数量的单词分隔?
这是“强力”实施:
def search_query(query, page):
count=i=0
for word in page.split():
if word == query[i]: i+=1
if i==len(query):
count+=1
break
print count
search_query(['hello','kilojoules'],'hello my good friend kilojoules')
1
例如,当查询为
hello kilojoules
时,我想将hello my good friend kilojoules
识别为查询的一个实例,但不计算kilojoules is my good friend
。这是我对令人满意的正则表达式的幼稚尝试:
re.findall('hello\s\Skilojoules','hello my friend kilojoules')
。这行不通。我认为它会起作用,因为我的理解是“找到所有hello
和kilojoules
实例,并用空格或空格分隔”。 最佳答案
让我澄清一下:
(?s)\bhello\b.*?\bkilojoules\b
这个正则表达式的意思是*匹配整个单词hello,然后匹配任何字符,包括空格和换行符,然后匹配整个单词千焦耳。
如果没有换行符,并且不关心整个单词匹配,请使用
hello.*?kilojoules
请注意,
\s\S
只是一个空格,后跟一个非空格。因此,hello\s\Skilojoules
可以匹配hello bkilojoules
,但不能匹配hello kilojoules
。关于python - Python正则表达式查找与其他单词分开的单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31372784/