2015-07-12 116 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的建議

相關問題