如何使用python中介于两个分号之间的regex提升数据?

2024-04-16 07:53:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个文件中有一组行,用分号分隔,如下所示:

8=FIX.4.2;9=159;35=A;56=MBT;34=1;7202=asdf:asdf;52=20130624-04:10:00.843;43=Y;98=0;10=000;Timestamp=Fri July 25 1958 16:12:52:112545;MsgDirection=1;

我想要的是整个消息,直到10=000;值7202,即asdf:asdf。你知道吗

我知道了:

(^.*000;)

根据regex的说法,这应该能让我在10=000之前完成整条生产线;。太棒了。但如果我这么做:

(^.*000;)(7202=.*;)

根据regex101.com的说法,我什么都不匹配。你知道吗

我不知道为什么添加第二个分组会使整个表达式无效。你知道吗

这方面的任何帮助都会很好。你知道吗

谢谢


Tags: 文件com消息表达式julytimestampregexmbt
1条回答
网友
1楼 · 发布于 2024-04-16 07:53:28

第一版问题的答案

“我正在尝试将regex与python结合使用,以便从7202=中提取数据,因此我希望asdf:asdf。“

如果我理解正确,您的目标是找到介于7202=;之间的数据。在这种情况下:

>>> import re
>>> line = "8=FIX.4.2;9=159;35=A;56=MBT;34=1;7202=asdf:asdf;52=20130624-04:10:00.843;43=Y;98=0;10=000;Timestamp=Fri July 25 1958 16:12:52:112545;MsgDirection=1;"
>>> re.search('7202=([^;]*);', line).group(1)
'asdf:asdf'

正则表达式是7202=([^;]*);。这符合:

  1. 文本字符串7202=

  2. 在第一个分号之后但不包括第一个分号的任何字符: ([^;]*)。因为这在括号中,所以它被捕获为组1。

  3. 文字字符;

第二版问题的答案

“我想要的是整个消息,直到10=000;值7202,即asdf:asdf。“

>>> import re
>>> line = "8=FIX.4.2;9=159;35=A;56=MBT;34=1;7202=asdf:asdf;52=20130624-04:10:00.843;43=Y;98=0;10=000;Timestamp=Fri July 25 1958 16:12:52:112545;MsgDirection=1;"
>>> r = re.search('.*7202=([^;]*);.*10=000;', line)
>>> r.group(0), r.group(1)
('8=FIX.4.2;9=159;35=A;56=MBT;34=1;7202=asdf:asdf;52=20130624-04:10:00.843;43=Y;98=0;10=000;', 'asdf:asdf')

正则表达式是.*7202=([^;]*);.*10=000;。这符合:

  1. 任何在7202=之前或包括.*7202=

  2. 在第一个分号之后但不包括第一个分号的任何字符:([^;]*)。因为这在括号中,所以它被捕获为组1。

  3. ;开头并以10=000;结尾的任何字符:;.*10=000;

整个匹配字符串的值可用作r.group(0)。组1的值可用作r.group(1)。因此,单个匹配对象r让我们同时获得两个字符串。你知道吗

相关问题 更多 >