如何仅 select 目标字符串之后的下一个字符串但目标字符串之后的下一个字符串,而不考虑标点符号?

How to only select the very next string after target string but the next string after the target string, regardless of punctation?

我有一个看起来像这样的 df:

id        query
1         select * from table1 where col1 = 1
2         select a.columns FROM table2 a

我只想将 select 字符串(table 如果你知道 sql)放在字符串 FROM 之后的新列中。 FROM可以用不同的大小写拼写(即From, from,FROM,etc)。

如何 select From 之后的字符串而不是 FROM 字符串

之后的下一个字符串

我试过了:

df['tableName'] = df['query'].str.extract('[^from]*$')

但这不起作用。我不确定是否应该立即将整个 df 小写。

新的 df 应该是这样的:

id        query                                 tableName      
1         select * from table1 where col1 = 1   table1
2         select a.columns FROM table2 a        table2

提前致谢。

你可以试试

df['tableName'] = df['query'].str.extract('(?i)from ([^ ]*)')

(?i)表示忽略大小写。

print(df)

   id                                query tableName
0   1  select * from table1 where col1 = 1    table1
1   2       select a.columns FROM table2 a    table2

这将在没有正则表达式的情况下为您提供答案,并且应该考虑“table”

的所有大写类型
df['Table_Name'] = df['query'].apply(lambda x : x.lower().split('from')[1]).apply(lambda x : x.split()[0])