2016-01-21 26 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() 
相关问题