2016-04-23 78 views
-1

我正在使用Python。 請幫我找到這個正則表達式:Python中的正則表達式模式(匹配換行符和製表符)

SELECT 
    SELECT select1 
    FROM 
     SELECT A 
     FROM B 
     WHERE C 
    WHERE X 
FROM 
    SELECT from1 
    FROM from2 
    WHERE from3 
WHERE 
    SELECT child1 
    FROM child2 

我要拿出三個部分:

SELECT select1 
FROM 
    SELECT A 
    FROM B 
    WHERE C 
WHERE X 

SELECT from1 
    FROM from2 
    WHERE from3 

SELECT child1 
    FROM child2 

隨着每個部分,我要好吧,我會做一個遞歸調用再次做同樣的事情。 :)

+0

您使用什麼語言? – Barmar

+0

我正在使用Python – tuankhoa1996

+0

您已經嘗試過哪些正則表達式?我們沒有在沒有在這裏嘗試任何東西而在你的作業上工作 –

回答

1

此正則表達式會爲你

(?=\t)((?:.|\n\t+)*) 

Regex Demo

正則表達式擊穿工作

(?=\t) #This lookahead finds the position of \t 
    ( #Capturing group 
    (?: #Non-capturing group 
     . #Match any character (but this does not matches \n.So we use alternation) 
    | #Alternation (OR) 
     \n\t+ #Match all lines \n followed by \t (as it seems from your input) 
    )* #Repeat this until any of the condition (mainly \n followed by \t) fails 
) 

注意: - 雖然在python中使用它,但確保它只是\t而不是簡單的空間。

Python代碼

p = re.compile(r'(?=\t)((?:.|\n\t+)*)', re.MULTILINE) 
test_str = "SELECT\n\tSELECT select1\n\tFROM\n\t\tSELECT A\n\t\tFROM B\n\t\tWHERE C\n\tWHERE X\nFROM\n\tSELECT from1\n\tFROM from2\n\tWHERE from3\nWHERE\n\tSELECT child1\n\tFROM child2" 
print(re.findall(p, test_str)) 

Ideone Demo

+0

它完美的作品:)!但是你能爲我解釋你的代碼嗎? – tuankhoa1996

+0

@ tuankhoa1996代碼或正則表達式? – rock321987

+0

你的正則表達式,我不在'':。| \ n \ t +'部分! – tuankhoa1996

0

這是超級簡單:^\s(.*)

下面是如何使用它的代碼:

import re 

str = "Your text here" 
p = re.compile(ur'^\s(.*), re.MULTILINE) 
re.findall(p, str) 

說明

  • ^錨行啓動
  • \s匹配的空間
  • (.*)匹配的一切,直到行尾
+0

雖然它似乎在正則表達式101上工作..它捕捉每一行 – rock321987