Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使用regex提升数据';两个分号之间是什么?_Python_Regex - Fatal编程技术网

如何在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')