从.txt文件中提取变量字符串

时间:2018-01-18 16:52:19

标签: c# python batch-file scripting

我们有一位客户使用我们的某些设备并输出我们用作诊断的特定字符串。

然而,有问题的客户使用了他们自己的日志记录系统,该系统用大量随机的东西填充输出文件,这对我们来说是无关紧要的。

我之后在不同位置提取变量字符串并将这些提取的字符串放入新的文本文件中。

以下是我之后的变量:

*X;3;194; 0;2;125;0;0012;32;0;261D3;??

如上所述,此文字可能因内容而异,但始终以*X开头,且通常不超过38个字符(包括空格和;

案文的一个例子是......

2018-01-15 11:16:43.566 pid=2800 tid=17 ResultReader [INFO ] packet received: *X;3;194; 0;2;126;0;0012;32;0;26357;??
2018-01-15 11:16:43.566 pid=2800 tid=17 ResultReader [ERROR] Device reset - Critical error: BALL_IN_THE_SAME_DIRECTION_WITH_WHEEL_ROTOR
2018-01-15 11:16:43.567 pid=2800 tid=17 events [INFO ] EmitEvent - RolWheelStatusRelayMsg{PreviousPacket=Protocol: EXTENDED, State: FINISH_BETTING, GameCount: 194, WinningNumber: 0, WarningFlags: [BALL_IN_THE_SAME_DIRECTION_WITH_WHEEL_ROTOR], RotorSpeed: 12, RotorDirection: CLOCKWISE, ExtendedFlags: [ROTOR_RUNNING_AT_LEGAL_SPEED, ROTOR_ROTATING_CLOCKWISE], SpinCounter: 49, BallDirection: CLOCKWISE, BallSpeed: 12, BallInPocketPosition: -1, Packet=Protocol: EXTENDED, State: FINISH_BETTING, GameCount: 194, WinningNumber: 0, WarningFlags: [BALL_IN_THE_SAME_DIRECTION_WITH_WHEEL_ROTOR], RotorSpeed: 12, RotorDirection: CLOCKWISE, ExtendedFlags: [ROTOR_RUNNING_AT_LEGAL_SPEED, ROTOR_ROTATING_CLOCKWISE], SpinCounter: 50, BallDirection: CLOCKWISE, BallSpeed: 12, BallInPocketPosition: -1}
2018-01-15 11:16:44.067 pid=2800 tid=17 ResultReader [INFO ] packet received: *X;3;194; 0;2;126;0;0012;32;0;26357;??

介于两者之间的文字可能有所不同,但目标仍然相同。我不介意如何但可能需要对不同的文件执行,这些文件可能有不同的信息。 (如果有意义的话)

2 个答案:

答案 0 :(得分:1)

如果使用正则表达式,以下内容将为您完成...

/\*X.*\?\?/g

识别字符串的开头(\ * X),然后匹配任何字符0次或更多次(。*),直到双重问号(\?\?)。

最初的*字符和?符号被转义以防止其默认含义被解释。

答案 1 :(得分:0)

我可能会这样做:

import re

with open('logfile.txt') as f: # assuming your log file name is logfile.txt...
    for line in f:
        ret = re.search('X.{36,40}\n$', line) # Here I take all starting with X, 36 to 40 length string and ending with a newline
        if ret is None:
            continue
        extracted_var = ret.group(0).strip()
        print(extracted_var)

使用您的日志文件样本输出:

X;3;194; 0;2;126;0;0012;32;0;26357;??
X;3;194; 0;2;126;0;0012;32;0;26357;??