所以本质上我试图从一个目录中的多个文件中读取行,并使用正则表达式来专门查找某种时间戳的开头,我还想在正则表达式中放置一个月份列表的实例,然后根据每个月出现的次数创建一个计数器。我下面有一些代码,但它仍在进行中。我知道我关闭了 date_parse,但这就是我问的原因。如果您能想到更有效的方法,请留下其他建议。谢谢。
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)
最佳答案
在正则表达式中,您可以有一个替代模式列表,使用竖线分隔。
http://docs.python.org/library/re.html
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
一些注意事项:
我建议您使用原始字符串(带有
r''
或r""
)作为模式,这样反斜杠就不会变成字符串转义符。例如,在普通字符串中,\s
不是转义符,您将得到一个反斜杠,后跟一个 's',但\n
是一个转义符,您将得到获取单个字符(换行符)。在正则表达式中,当您将一系列字符括在方括号中时,您将获得与任何字符匹配的“字符类”。因此,当您输入
[Date:\s]+
时,您将匹配Date:
,但也会匹配taD:e
或任何其他组合那些角色。完全可以放入一个与其自身匹配的字符串,例如Date:
。
关于python - 您可以将列表成员的实例放入正则表达式中以在 python 中进行匹配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10118032/