我正在嘗試提取 MySQL 查詢的部分內容以獲取我想要的信息。我在Python中使用了這段代碼/正則表達式:import re
query = "SELECT `asd`.`ssss` as `column1`, `ss`.`wwwwwww` from `table`"
table_and_columns = re.findall('\`.*?`[.]\`.*?`',query)我的預期輸出:['`asd`.`ssss`', `ss`.`wwwwwww`']我的真實輸出:['`asd`.`ssss`', '`column1`, `ss`.`wwwwwww`']有人可以幫助我并解釋我哪里出錯了嗎?正則表達式應該只找到那些有兩個字符串(如asd中間有一個點)的字符串。PS:我知道這不是一個有效的查詢。
3 回答

守著一只汪
TA貢獻1872條經驗 獲得超4個贊
該點.
還可以匹配反引號,因此該模式從匹配反引號開始,并且能夠匹配所有字符,直到它到達中的文字點[.]
無需使用非貪婪量詞,您可以使用否定字符類僅防止跨越反引號邊界。
`[^`]*`\.`[^`]*`
星號*
匹配 0 次或多次。如果必須至少有一個字符,并且不需要換行符和空格,則可以添加\s
以防止匹配空白字符并使用+
來匹配 1 次或多次。
`[^`\s]+`\.`[^`\s]+`
例如
import re
query = "SELECT `asd`.`ssss` as `column1`, `ss`.`wwwwwww` from `table`"
table_and_columns = re.findall('`[^`\s]+`\.`[^`\s]+`',query)
print(table_and_columns)
輸出
['`asd`.`ssss`', '`ss`.`wwwwwww`']

炎炎設計
TA貢獻1808條經驗 獲得超4個贊
問題是 .*?
匹配任何字符(行終止符除外)甚至空格。另外,由于您已經在使用*
,這意味著出現 0 次或無限次,不確定您是否需要使用?
. 所以這似乎有效:
\`\S+\`[.]\`\S+\`
其中\S
是任何非空白字符。您始終可以使用https://regex101.com檢查正則表達式
添加回答
舉報
0/150
提交
取消