Python中的正则表达式模式(匹配换行符和制表符)

Python中的正则表达式模式(匹配换行符和制表符),python,regex,Python,Regex,我正在使用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

我正在使用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


对于我取出的每个部分,我将执行一个递归调用以再次执行相同的操作。:)

非常简单:
^\s(.*)

下面是如何在代码中使用它:

import re

str = "Your text here"
p = re.compile(ur'^\s(.*), re.MULTILINE)
re.findall(p, str)
解释
  • ^
    锚定到测线起点
  • \s
    匹配空格
  • (.*)
    匹配所有内容,直到行尾

此正则表达式适用于您

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

正则表达式分解

注意:-在python中使用此选项时,请确保它仅为
\t
,而不是简单的空格

Python代码


您使用的是什么语言?您已经尝试过的正则表达式在哪里?如果你不在这里尝试任何东西,我们就不会做你的家庭作业,而它似乎在regex 101上工作。它捕捉每一行,它工作得非常完美:)!但是你能给我解释一下你的代码吗?你的正则表达式,我不理解
?:。\n\t+
部分@Tuankhao1996您还可以通过单击向上箭头向上投票。此外,您需要从最终输出中删除一个
\t
,以匹配您的确切格式
import re

str = "Your text here"
p = re.compile(ur'^\s(.*), re.MULTILINE)
re.findall(p, str)
(?=\t)((?:.|\n\t+)*)
(?=\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
  )
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))