如何在python中使用正则表达式提取数据,这两个分号之间有两个分号?

时间:2017-08-10 01:34:30

标签: 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;)

根据正则表达式应该得到整行直到10 = 000;。哪个好。但如果我这样做:

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

根据regex101.com意味着我不会匹配任何东西。

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

任何有关这方面的帮助都会很棒。

由于

1 个答案:

答案 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=([^;]*);。匹配:

  1. 文字字符串7202=

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

  3. 字面字符;

  4. 回答问题的第二个版本

    "我想要的是直到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;

    4. 整个匹配字符串的值可用r.group(0)。第1组的值以r.group(1)的形式提供。因此,单个匹配对象r可以让我们获得两个字符串。