3

我有一些来自 CAS 的输出,我想将这些东西分成三部分,这里是一些示例输出:

' 1+2;\r\n\r(%o2)                                  3\r\n(%i3) '
'?\r\n\r\n\rpos;\r\n\r(%o1)                                  0\r\n(%i2) '

我想将输出分成三个部分:

  1. 从字符串开头到';'的部分 分号。
  2. 从分号之后到最后 之前的部分\r\n\(%i\d+\)
  3. 最后一部分是单独的,即。\r\n\(%i\d+\)在最后的部分总是一个人。

我将如何将它们分开?我无法创建代码来做到这一点。

编辑:即使在分隔部分之后,我也希望保留分号。

4

2 回答 2

2

这应该满足您的要求:

re.findall('^([^;]+);(.*)(\r\n\(%i\d+\).+)$', text, re.S)

要在第一组中包含分号,只需将其添加到分组括号中:

re.findall('^([^;]+;)(.*)(\r\n\(%i\d+\).+)$', text, re.S)
于 2013-03-25T16:10:19.590 回答
1

我不确定您是否需要正则表达式:

In [31]: s = '?\r\n\r\n\rpos;\r\n\r(%o1)                                  0\r\n(%i2) '

In [32]: p1, _, p23 = s.partition(';')

In [33]: p2, _, p3 = p23.rpartition('\r\n')

In [34]: p1, p2, p3
Out[34]: ('?\r\n\r\n\rpos', '\r\n\r(%o1)                                  0', '(%i2) ')
于 2013-03-25T15:45:09.563 回答