我有一个查询:
scipy.stats.kruskal(*[group["variable"].values for name, group in df.groupby("treatment")])
使用正则表达式,我只想从查询字符串中获取 表名。
我尝试使用正则表达式:
select a.id, a.nama, b.alamat from tsql as a join tswl as b on a.id = b.id join tscl as c on a.id=c.id
哪个设法在“ from”之后获得第一个表名,但是跳过了第二个表名,而获得了第三个表名。
当前组:
[组1:“ tsql”,组2:“ tscl”]
目标群体: [组1:“ tsql”,组2:“ tswl”,组3:“ tscl”] ...依此类推,直到链连接查询的姓氏
任何帮助将不胜感激!
答案 0 :(得分:0)
您当前的表达式未考虑from / join关键字的可能重复。
您可以尝试使用以下表达式:
(?<=from|join)\s+(\w+)
请在这里自己尝试:https://regex101.com/r/qQ1rvs/1
此处使用正向后视(?<= ...)可以捕获其后的任何单词(\ w +)。在这种情况下,这些表达式之后的每个表名都会被该表达式捕获。
答案 1 :(得分:0)
您可以尝试以下方法:
var query = 'select a.id, a.nama, b.alamat from tsql as a join tswl as b on a.id = b.id join tscl as c on a.id=c.id';
console.log(query.match(/(from|join)\s+(\w+)/g).map(e => e.split(' ')[1]))
输出:
Array(3) [ "tsql", "tswl", "tscl" ]
答案 2 :(得分:0)
注意:由于不可靠的regexp解析器,此处讨论的regexp不适用于大多数版本的MySQL。
问题:
from
或join
用于注释,字符串或列名等。(我不会解决这个问题。)UNION
-表名将被集中在一起,而不考虑这些。FROM a JOIN(b JOIN c)
-已部分(?)处理FROM ( SELECT ... )
-未处理from
与FROM
)-在此正则表达式的提示之外LEFT OUTER JOIN
-没问题因此,这将主要处理一个表名:
\b(FROM|JOIN)\s+\`?(\w+)\`?
如果JS有办法遍历字符串,从中断处继续,那么您可以全部获得。
为了更好地处理内部的反引号和标点符号:
\b(FROM|JOIN)\s+(\w+|`[^`]+`)
,但是当背景发生时,您将需要去除背景。