重新分割不在^A上工作

2024-06-02 14:26:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解析输入行

8=FIX.4.2^A9=0126^A35=0^A34=000742599^A49=L3Q206N^A50=2J6L^A52=20130620-11:16:27.344^A369=000733325^A56=CME^A57=G^A142=US,IL^A1603=OMS2^A1604=0.1^A

这里有不同的数据字段,用^{a分隔。我试图得到各个数据字段(比如8=FIX.4.2,9=0126,35=0,等等)。问题是python有时将^A解释为单个字符(在vim中,这是ctrl-v,ctrl-A),有时也解释为包含两个字符的字符串“^A”。所以我试过

^{pr2}$

但后来我知道了

for entry in entries:
    print entries

我只是用原来的绳子结束,没有任何分裂。这是问题吗重新分割?在


Tags: 字符entriesa9ctrl数据字cmea50a34
3条回答

^是一个元字符,它只匹配字符串的开头。逃离它:

>>> re.split('\^A', line)
['8=FIX.4.2', '9=0126', '35=0', '34=000742599', '49=L3Q206N', '50=2J6L', '52=20130620-11:16:27.344', '369=000733325', '56=CME', '57=G', '142=US,IL', '1603=OMS2', '1604=0.1', '']

在表达式中不需要使用|,尤其是当两个“alternate”字符串相同时。在

但是,似乎您有\x07\a控制字符,而不是两个字符^A字符串。只需使用.split()对该值进行拆分,不需要正则表达式:

^{pr2}$

^在正则表达式中有特殊的含义,因此应该首先对其进行转义。在

>>> strs = "8=FIX.4.2^A9=0126^A35=0^A34=000742599^A49=L3Q206N^A50=2J6L^A52=20130620-11:16:27.344^A369=000733325^A56=CME^A57=G^A142=US,IL^A1603=OMS2^A1604=0.1^A"
>>> re.split('\^A',strs)
['8=FIX.4.2', '9=0126', '35=0', '34=000742599', '49=L3Q206N', '50=2J6L', '52=20130620-11:16:27.344', '369=000733325', '56=CME', '57=G', '142=US,IL', '1603=OMS2', '1604=0.1', '']

来自docs

^{pr2}$

取决于那一行包含什么。在

如果要拆分2个字符的字符串'^A',请转义regexps的特殊字符^,在本例中可能意味着'\^A'。在

更有可能这是caret notation打印字节值为0x01的单个字符的方法,在这种情况下,您可能希望在'\x01'上拆分。在

(您也可以使用string自己的split()函数,我猜这比用regexp来处理这么简单的事情要快得多)

相关问题 更多 >