Python正则表达式找到与其他单词分开的单词

时间:2015-07-12 21:29:00

标签: python regex findall

有没有办法使用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')。这不起作用。我认为它会起作用,因为我对这说的内容的理解是"找到hellokilojoules的所有实例,用空格或空格分隔"。

2 个答案:

答案 0 :(得分:2)

我根据stribizhev的建议在re.findall('hello.*?kilojoules','a happy hello my amigo kilojoules now goodbye')找到了成功

答案 1 :(得分:1)

让我澄清一下:

(?s)\bhello\b.*?\bkilojoules\b

这个正则表达式意味着*匹配整个单词 hello ,然后任何字符甚至是空格和换行符,然后是整个单词 kilojoules

如果您没有换行符,并且您不关心全字匹配,请使用

hello.*?kilojoules

请注意,\s\S只是一个后跟非空格的空格。因此,hello\s\Skilojoules可以匹配hello bkilojoules,但不能匹配hello kilojoules