我在用分号分隔的文件中得到了以下几行:

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;)


根据正则表达式应该让我整行直到10 = 000;。太好了但是,如果我这样做:

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


根据regex101.com的说法,我什么都不会匹​​配。

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

任何帮助都会很棒。

谢谢

最佳答案

第一个问题的答案

“我正在尝试将正则表达式与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=([^;]*);。这符合:


文字字符串7202=
紧随但不包括第一分号的所有字符:
([^;]*)。因为它在括号中,所以被捕获为组1。
文字字符;


回答第二版问题

“我想要的是整个消息,直到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;。这符合:


7202=以下的所有内容:.*7202=
紧接但不包括第一个分号的所有字符:([^;]*)。因为它在括号中,所以被捕获为组1。
;开头并以10=000;结尾的任何字符:;.*10=000;


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

10-02 18:05