2013-03-25 2 views
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+\)은 항상 마지막 부분에서 혼자 있습니다.

어떻게 분리합니까? 코드를 작성하는 데 문제가 있습니다.

편집 : 섹션을 분리 한 후에도 세미콜론을 유지하고 싶습니다.

+0

그룹 2 또는 3에 '\ r \ n \ (% i \ d + \)'가 포함되어 있거나 일치하는 gro에서 제외되어야합니다. 업? – woemler

+0

@willOEM 그룹 3에 포함됩니다. 그것은 그룹 3의 유일한 항목이 될 것입니다. – mike

+0

명확한 설명을 보내 주셔서 감사합니다. 이에 따라 답변을 업데이트했습니다. 이 수정 사항을 명확하게 작성하려면 질문의 문구를 약간 수정해야합니다. – woemler

답변

2

이 요청한 것을 수행해야합니다

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

은 첫 번째 그룹에 세미콜론을 포함하려면, 단지에 추가 그룹화 괄호 :

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

대부분의 코드가 작동하지만, 그룹을 분리 한 후에 세미콜론을 버린다. 어떻게 할 수 있는가? 나는 세미콜론 (semicolon)을 유지하고 그것을 여전히 "경계 (boundary)"로 사용한다. 그것은 첫 번째 그룹에 남아 있어야한다. – mike

+0

첫 번째 그룹을 정의하는 괄호에 세미콜론을 추가하면 일치하는 그룹에서 제외되지 않습니다. 일치 그룹을 정의하는 괄호가 있으면 그 그룹 외부의 모든 항목이 반환되지 않습니다. 괄호가 없으면 일치하는 정규식 패턴의 everythng이 반환됩니다. – woemler

+0

편집 내용이 예상대로 작동합니다. – mike

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) ') 
+0

미니멀리스트 접근법은 확실히 좋지만, 세미콜론이 필요하다. – mike

관련 문제