您能否将列表成员的实例放在正则表达式中,以便在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:
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