![](/img/trans.png)
[英]Python regex - capture text between two words as string, then append to list
[英]Capture all multiline text between two know words using regex Python 3
我正在嘗試使用Python的regex包捕獲跨多行文本的所有文本。 我所看到的文本是,您會注意到它是SQL。 之所以有意義,是因為我想捕獲“ SELECT”短語和“ FROM”短語之間的所有內容。 在下面的示例中,我有3個項目,column1,column2,sum(column3),但我可以有更多。 另外,我只知道我可能會使用\\n
或\\r
但是我不知道它將是一個還是多個。
SELECT
a11.Column1
, a12.Column2
,SUM(Column3)
FROM DB.MyFactTable a11
LEFT OUTER JOIN DB.MyDimTable_1 a12 ON
(a11.k1 = a12.k1 AND a11.k2 = a12.k2 AND a12.k3 = a11.k3)
LEFT OUTER JOIN DB.MyDimTable_2 a13 ON
(a11.k1 = a12.k2 AND a11.k4 = a12.k4 AND a12.k5 = a11.k5)
WHERE a11.Column_N IN (X1, X2, X3, X4)
GROUP BY 1,2
到目前為止,我的正則表達式是
rgx_pat = (?<=SELECT)(\s)*.*\n.*
result = re.findall(rgx_pat,my_sql_above,re.MULTILINE)
先謝謝您的幫助。
如果要查找包括換行符在內的所有內容,則無需嘗試找出涉及除換行符和換行符之外的所有內容的查詢,只需使用DOTALL
和now即可.
表示包括換行符在內的所有內容。
所以:
query = '''SELECT
a11.Column1
, a12.Column2
,SUM(Column3)
FROM DB.MyFactTable a11
LEFT OUTER JOIN DB.MyDimTable_1 a12 ON
(a11.k1 = a12.k1 AND a11.k2 = a12.k2 AND a12.k3 = a11.k3)
LEFT OUTER JOIN DB.MyDimTable_2 a13 ON
(a11.k1 = a12.k2 AND a11.k4 = a12.k4 AND a12.k5 = a11.k5)
WHERE a11.Column_N IN (X1, X2, X3, X4)
GROUP BY 1,2
'''
rgx_pat = re.compile(r'SELECT\s(.*?)\sFROM', re.DOTALL)
result = rgx_pat.findall(query)
現在result
將是:
['a11.Column1\n, a12.Column2\n,SUM(Column3)']
我不確定您是否要.*?
或.*
,以及是否要在SELECT
之后和FROM
之前強制使用空格,所以我猜到了您要嘗試執行的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.