2016-01-21 90 views
-2

我試圖使用正則表達式來執行某個代碼。在下面的示例中,我的意圖是讓名稱中的所有項匹配(如果在name3中找到並打印出來)。問題是隻有匹配的字符串中的第一項被打印出來。如何使用正則表達式匹配列表中的所有項目

import re 

def foo():  
    for counter, option in enumerate(keywords):   
     try:    
      name = 'can one and three be odd numbers' 
      name2 = name[:] 
      name3 = ['one','two','three', 'four',]    
      regex1one = re.compile(r'\b(?:%s)\b'%'|'.join(name3)) 
      regex11one = re.compile(r'\b(?:%s)\b'%'|'.join(keywords))    
      name4 = regex1one.search(name).group() 
      print name4 
      break 
     except: 
      break 

keywords = ['be','are','is',] 

foo() 
+0

如果計劃獲得多個匹配,使用're.findall'或're.finditer'。而你的字符串包含1個「1」來匹配。這個示例代碼中沒有'two','three',也沒有'four' –

+0

,它只會打印['one'],我想['one','three']。 findall()如何做到這一點?在詢問之前,我嘗試了findall(),但仍然沒有回答。 – wakamdr

+2

你拼錯了三個名字,findall應該工作。 – bink1time

回答

0

感謝tobias_k,我刪除了所有無用的東西。那就是:

進口重新

def foo(): 
    name = 'can one and three be odd numbers'  
    name3 = ['one','two','three', 'four',]    
    regex1one = re.compile(r'\b(?:%s)\b'%'|'.join(name3)) 
    regex11one = re.compile(r'\b(?:%s)\b'%'|'.join(keywords)) 
    name4 = re.findall(regex1one, name) 
    print name4 
keywords = ['be','are','is',] 

foo()