r - 正则表达式:匹配多个模式并获取字符串的中间
问题描述
我正在编写一个代码,该代码需要一堆 SQL 查询,旨在将查询仅分解为表名。
例如,我有以下查询:
delete from pear.admin where jdjdj
delete from pear.admin_user where blah
delete from ss_pear.admin_user where blah
我试图得到一个regex
匹配所有这些模式的,那是通过首先创建一个多个模式的列表然后传递它str_extract
吗?
我使用了一个正则表达式,但它给了我以下输出:
delete from pear.admin
我如何摆脱它之前的第一个单词?我试过(.*)
了,但似乎没有任何效果。
sql_data$table_name <-
str_extract(sql_data$Full.Sql, "[^_]+\\.[\\w]+\\_[\\w]+")
解决方案
我只熟悉基本的 R 正则表达式函数,所以这里有一个选项sub
:
queries <- c("delete from pear.admin where jdjdj",
"delete from pear.admin_user where blah",
"delete from ss_pear.admin_user where blah")
table_names <- sapply(queries, function(x) {
sub(".*\\bfrom\\s+(\\S+).*", "\\1", x)
})
table_names
1 2 3
"pear.admin" "pear.admin_user" "ss_pear.admin_user"
这应该至少在某种程度上可靠地执行,因为据我所知,紧跟在关键字后面的FROM
必须是表名。
推荐阅读
- java - 无法通过 javaRDD 进行迭代器
- amazon-web-services - Amazon CloudFront URL 问题
- mvvm - WTS 无法在 XAML 中声明 ViewModelLocator
- php - 在 php 中分别拆分 URL 和返回组件
- python - Python:从嵌套循环中打印数字序列
- javascript - 对于此默认设置,如何开始使用 express 和 nuxt/viue
- android - 为什么我们在 MVP 中定义视图和演示者的范围
- powershell - 在模块“Az.Compute”中找到“Get-azVM”命令,但无法加载该模块
- clojure - 如何查看 lein 任务的执行时间
- ios - 如何让颤振运行在带有 iPhone 的 OSX 上可靠地工作?