我正在尝试使用Python处理日志文件并提取每个条目的日期,时间和日志消息,并将其存储在dicts列表中。我为此目的使用了re.search()
和group()
方法
问题是日期/时间采用各种格式,如。
dd/mm/yy, hh:mm AM - logs
dd/mm/yyyy, hh:mm a.m. - logs
dd/mm/yy HH:mm - logs
我的程序看起来像这样:
import re
infile=open('logfile.txt', 'r')
loglist=[]
logdict={}
for aline in infile.readlines():
line=re.search(r'^(\d?\d/\d?\d/\d\d), (\d?\d:\d?\d \w\w) - (.*?)',aline)
if line:
logdict['date'] = line.group(1)
logdict['time'] = line.group(2)
logdict['logmsg'] = line.group(3)
loglist.append(logdict)
但是,这只与上述第一种格式相匹配 我如何匹配其他格式并维护组?或者有更简单的方法吗?
答案 0 :(得分:2)
您可以在模式后使用{m,n}
表示重复m
和n
之间。因此,请使用\d{1,2}
表示1位或2位数字。您可以使用替换来指示多种可能性,例如\d{2}|\d{4}
2年或4位数年。
所以regexp可以是:
^(\d{1,2}/\d{1,2}/(?:\d{2}|\d{4})),? (\d{1,2}:\d{1,2}(?: [AaPp]\.?[Mm]\.?)?) - (.*)'
答案 1 :(得分:0)
我首先使用正则表达式提取数据,然后手动验证它。我不会将正则表达式用于两件事,验证和提取。
为了清楚起见,我还要为这些正则表达式指定名称,并确保每个正则表达式都返回一个原子,如时间或日期或am_pm,然后将它们串在一起形成句子。 注意:我没有为组分配名称,但我认为它可能但不确定如何
但是最后你可以获得你的date_time并对其进行拆分,例如date_time.split(" /"),它会返回你的日,月,年然后你可以验证或使用
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"Name";
}];
[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSArray *textfields = alertController.textFields;
UITextField *nameTextfield = textfields[0];
self.textFieldString = nameTextfield.text;
NSLog(@"self.textFieldString is: %@", self.textFieldString); // -> this returns a null value when the string length is > 11
NSLog(@"nameTextfield.text is: %@", nameTextfield.text); // -> this returns the string even when the string length is > 11
}]];
答案 2 :(得分:-1)
将其拆分为“ - ”,然后按“,”或“
拆分