B
正则
[A-Za-z0-9_]等于\w #\w 数字,字母,下划线 \s #空格
group代表捕获组
在 Python 的 re 模块中,match.group(1) 表示正则表达式匹配的结果中的第一个捕获组(也就是第一个括号内的内容)。当正则表达式中包含括号 () 时,括号内的部分会被视为一个捕获组,在匹配成功后可以通过 match.group(1) 来获取这个捕获组中的内容。
举个例子,假设有一个正则表达式 r'(\d+)-(\d+)',它用来匹配形如 "123-456" 的字符串。在这个正则表达式中,有两个捕获组,分别是 (\d+) 和 (\d+)。如果用这个正则表达式去匹配字符串 "123-456",那么 match.group(0) 将返回整个匹配的字符串 "123-456",而 match.group(1) 将返回第一个捕获组中的内容 "123",match.group(2) 将返回第二个捕获组中的内容 "456"。
因此,match.group(1) 表示获取匹配结果中第一个捕获组的内容。
import re # logs = [ # "logger:root 10 DEBUG C:/program File/a.log a.log line:1 1926-08-17 01:01:01,999 thread:1 thread:main01 process:11:maef__aaoa9208834,.;'p[qaosdif2930 23idfjariwe", # "logger:root 10 DEBUG C:/program File/a DEBUG a/logger .log logger .log line:10 2023-05-17 23:51:00,999 thread:10 thread:DEBUG01 process:11:logger root 10 DEBUG C /program File/a DEBUG a/logger .log logger .log line 10 2023-05-17 23 51 00,999 thread 10 thread DEBUG01 process 11", # ] # 定义正则表达式模式 patterns = { '%(name)s': re.compile(r'(logger:([a-zA-Z]+))'), 'levelno': re.compile(r'\b(\d{2})\b'), '%(levelname)s': re.compile(r'(DEBUG|INFO|WARNING|ERROR|CRITICAL)\b'), '%(pathname)s': re.compile(r'([A-Z]:(/[A-Za-z0-9_][a-zA-Z0-9\s]*)+.[a-z]+)'), '%(filename)s': re.compile(r'([A-Za-z_0-9][A-Za-z_0-9\s]*\.[a-z]+)'), # 匹配执行程序名 '%(lineno)d': re.compile(r'(line:(\d+))'), '%(asctime)a': re.compile(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3})'), # 匹配时间戳 '%(thread)d': re.compile(r'(thread:(\d+))'), '%(threadName)s': re.compile(r'(thread:([a-zA-Z]+\d+))'), '%(process)s': re.compile(r'(process:(\d+))'), '%(message)s': re.compile(r':\s*([^:]+)$'), } def process_log_entry(log_entry): elements = {} for key, pattern in patterns.items(): match = pattern.search(log_entry) if match: elements[key] = f"<{key},{match.group(1) if match.lastindex else None}>" else: elements[key] = f"<{key},None>" return elements print("请输入多行日志,在输入完成后,请输入两次回车:") logs = [] while True: line = input() if line: logs.append(line) else: break log_number = 1 for log_entry in logs: result = process_log_entry(log_entry) print(f"日志条目 {log_number}:") log_number += 1 for key, value in result.items(): print(value)
- 使用取模运算(num % 10)获取 num 的个位数,然后将其加到 sum 上。
- 使用整除运算(num / 10)更新 num 的值,将其去掉个位数。
- n % 100 是取模运算符,用于获取一个整数 n 的最后两位数字。具体地,取模运算符 % 返回的是 n 除以 100 的余数,也就是 n 的个位和十位数字组成的两位数。
例如,假设 n 的值为 1234,那么 n % 100 就是 34,因为 1234 除以 100 的余数是 34。
在给定一个整数的情况下,使用取模运算 % 可以帮助我们提取出该整数的最后几位数字。如果要提取出整数的百位数字,可以使用 n % 1000 / 100;如果要提取出整数的千位数字,可以使用 n % 10000 / 1000,以此类推。