如何在python中使用regex提升数据';两个分号之间是什么?
我在一个文件中得到了一组由分号分隔的行,如下所示:如何在python中使用regex提升数据';两个分号之间是什么?,python,regex,Python,Regex,我在一个文件中得到了一组由分号分隔的行,如下所示: 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的说法,我应该得到整条线,直到
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,这意味着我不会匹配任何东西
我不知道为什么添加第二个分组会使整个表达式无效
这方面的任何帮助都会很好
感谢您回答第一版的问题
“我正试图将正则表达式与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。”
正则表达式是*7202=([^;]*)*10=000;代码>。这符合:
小于等于7202=
的任何内容:*7202=
在第一个分号之后但不包括第一个分号的任何字符:([^;]*)
。因为这在括号中,所以它被捕获为组1
以开头的任何字符代码>并以10=000结尾代码>:*10=000;代码>
整个匹配字符串的值可用作r.group(0)
。组1的值可用作r.group(1)
。因此,单个match对象r
允许我们同时获得两个字符串。正则表达式不是这样嵌套的。您需要这样的内容:^.+7200=(.+;).+=000
现在,整个匹配是小于等于10=000的字符串,捕获组是asdf:asdf
Think OP还希望字符串的部分达到10=000
@JaredSmith我在问题中键入了以下文本:“我试图使用正则表达式和python将数据从7202=”中提取出来,所以我想得到asdf:asdf。”。我同意你的看法,他可能在找别的东西。@John1024对不起,我没有很好地表达这个问题,事实上,我正试图获得这两个信息。
>>> 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')