重新匹配一个模式

时间:2013-03-25 15:39:06

标签: python regex

我有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. 的部分
  4. 最后一部分,即{。{}},在最后一部分总是独自一人。
  5. 我将如何分开它们?我在创建代码时遇到了麻烦。

    编辑: 我希望即使分开这些部分后也能保留分号。

2 个答案:

答案 0 :(得分:2)

这应该按照您的要求进行:

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

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

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

答案 1 :(得分: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) ')