2013-03-25 65 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 UPS? – woemler 2013-03-25 15:45:35

+0

@willOEM組3將包含該信息。這將是第3組中的唯一項目 – mike 2013-03-25 18:14:32

+0

感謝您的澄清,我已經相應地更新了我的答案。你應該稍微調整一下你的問題的措辭,以使這個晶瑩剔透。 – woemler 2013-03-25 18:21:13

回答

2

這應該做你要求的是什麼:

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

包括第一組中的分號,只需將其添加到分組括號:

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

你代碼的大部分作品,但它分開組後,拋出分號,如何可以我保留分號並仍然將它用作「邊界」,它應該保留在第一組中。 – mike 2013-03-25 18:27:37

+0

通過將分號添加到定義第一組的圓括號中,它們不會從匹配的組中排除。當有括號定義匹配組時,它們之外的所有內容都不會被返回。當沒有括號時,則返回匹配的正則表達式模式中的每個句柄。 – woemler 2013-03-25 18:33:05

+0

您的編輯按預期工作。 – mike 2013-03-25 18:40:45

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 2013-11-04 20:24:27