您能否将列表成员的实例放在正则表达式中,以便在python中进行匹配?

您能否将列表成员的实例放在正则表达式中,以便在python中进行匹配?,python,regex,list,parsing,pattern-matching,Python,Regex,List,Parsing,Pattern Matching,因此,本质上我试图从一个目录中的多个文件中读取行,并使用正则表达式专门查找某种时间戳的开始,我还想在正则表达式中放置一个月列表的实例,然后根据它出现的次数为每个月创建一个计数器。我有一些代码在下面,但它仍然是一个正在进行的工作。我知道我结束了约会,但我知道这就是我为什么要问的原因。如果你能想出一个更有效的方法,请留下另一个建议。谢谢 months = ['Jan','Feb','Mar','Apr','May','Jun',\ 'Jul','Aug','Sep','Oct',

因此,本质上我试图从一个目录中的多个文件中读取行,并使用正则表达式专门查找某种时间戳的开始,我还想在正则表达式中放置一个月列表的实例,然后根据它出现的次数为每个月创建一个计数器。我有一些代码在下面,但它仍然是一个正在进行的工作。我知道我结束了约会,但我知道这就是我为什么要问的原因。如果你能想出一个更有效的方法,请留下另一个建议。谢谢

months = ['Jan','Feb','Mar','Apr','May','Jun',\
          'Jul','Aug','Sep','Oct','Nov','  Dec']
date_parse = re.compile('[Date:\s]+[[A-Za-z]{3},]+[[0-9]{1,2}\s]')
counter=0
for line in sys.stdin:
    if data_parse.match(line):
        for month in months in line:
            print '%s %d' % (month, counter)

在正则表达式中,可以有一个替代模式列表,使用垂直条分隔

一些注意事项:

  • 我建议您对模式使用原始字符串(带有
    r''
    r''
    ),这样反斜杠就不会变成字符串转义。例如,在普通字符串中,
    \s
    不是转义符,您将得到一个反斜杠,后跟一个“s”,但
    \n
    是转义符,您将得到一个字符(换行符)

  • 在正则表达式中,当您将一系列字符括在方括号中时,将得到一个与任何字符匹配的“字符类”。因此,当您放置
    [Date:\s]+
    时,您将匹配
    日期:
    ,但您也将匹配
    taD:e
    或这些字符的任何其他组合。只需输入一个匹配自身的字符串就可以了,比如
    Date:


谢谢steveha,他以前从未听说过defaultdict。我想这可能行得通。顺便说一句,如何使用格式打印defaultdict对象?
defaultdict
在各个方面都像一个普通的旧
dict
,只是如果您试图查找某个内容,但它不在其中,它会自动添加。如果您想打印找到的月份列表及其计数,您可以循环使用c:print(“%s:%d”%(month,c[month])中的月份
defaultdict
与其他任何dict:
相同,但这会以随机顺序打印月份。我建议您创建一个月份列表,如
lst\u months=['Jan','Feb',…,'Dec]
然后在该列表中循环几个月,并打印它们或其他内容。
from collections import defaultdict

date_parse = re.compile(r'Date:\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)')

c = defaultdict(int)

for line in sys.stdin:
    m = date_parse.match(line)
    if m is None:
        # pattern did not match
        # could handle error or log it here if desired
        continue # skip to handling next input line
    month = m.group(1)
    c[month] += 1