我在一个文件中有一组用分号分隔的行:
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意味着我不会匹配任何东西。
我不知道为什么添加第二个分组会使整个表达无效。
任何有关这方面的帮助都会很棒。
由于
答案 0 :(得分:3)
"我正在尝试使用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
可以让我们获得两个字符串。