2015-07-12 93 views
1

有没有办法使用re.findall或另一个正则表达式来计算指定顺序中的单词出现次数,由任意数量的单词分隔?Python正则表达式查找单词与其他词分开

这里是一个“强力”的实施:

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的所有实例”。

+1

也许'(?s)\ bhello \ b。*?\ bkilojoules \ b'?请注意'\ s \ S'只是一个空格,后面跟着一个非空格。 'hello \ s \ Skilojoules'可以匹配'hello bkilojoules',但不匹配'hello kilojoules'。 –

+1

这里一般嘟about关于使用[原始字符串](https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals),除非你喜欢键入任何原因的反斜杠按钮, – NightShadeQueen

+0

@stribizhev're.findall('(?s)\ bhello \ b。*?\ bkilojoules \ b','hello my amigo kilojoules')'nothing nothing – kilojoules

回答

1

让我澄清一下:

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

此正则表达式意味着*匹配整个单词你好,则任何字符,甚至一个空格和断行,然后整个字千焦耳

如果你没有换行符,如果你不关心全字匹配,使用

hello.*?kilojoules 

注意\s\S仅仅是一个空白遵循的非空白。因此,hello\s\Skilojoules可匹配hello bkilojoules,但不匹配hello kilojoules

1

我发现成功re.findall('hello.*?kilojoules','a happy hello my amigo kilojoules now goodbye'),以下stribizhev的建议

相关问题