【发布时间】:2015-07-12 21:29:00
【问题描述】:
有没有办法使用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?请注意,\s\S只是一个空格,后跟一个非空格。hello\s\Skilojoules可以匹配hello bkilojoules,但不能匹配hello kilojoules。 -
在此处使用raw strings 时一般会喃喃自语,除非您出于某种原因喜欢输入反斜杠按钮,
-
@stribizhev
re.findall('(?s)\bhello\b.*?\bkilojoules\b','hello my amigo kilojoules')什么都不返回