首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据regexp过滤字符串末尾的数据集

根据regexp过滤字符串末尾的数据集
EN

Stack Overflow用户
提问于 2021-03-09 01:09:32
回答 3查看 74关注 0票数 1

我正在使用REGEXP过滤一个包含10行的数据集,如下所示:

代码语言:javascript
复制
ID     Product
1      "VENLAFAXINE HCL CAP ER 24HR 37.5 MG (BASE EQUIVALENT)"
2      "MINOXIDIL POWDER"
3      "MENTHOL LOZENGE 10 MG"
4      "ZINC CHLORIDE GRANULES"
5      "CLOPIDOGREL BISULFATE TAB 75 MG (BASE EQUIV)"
6      "METHYLPREDNISOLONE TAB THERAPY PACK 4 MG (21)"
7      "DEXAMETHASONE TAB THERAPY PACK 1.5 MG (7)"
8      "METHYLPREDNISOLONE DOSE P (16)"
9      "MILLIPRED DP (13)"
10     "ZONACORT 7 DAY"

会让它看起来像

代码语言:javascript
复制
ID     Product
6      "METHYLPREDNISOLONE TAB THERAPY PACK 4 MG (21)"
7      "DEXAMETHASONE TAB THERAPY PACK 1.5 MG (7)"
8      "METHYLPREDNISOLONE DOSE P (16)"
9      "MILLIPRED DP (13)"

实际上,我希望根据最后一个字符是否是括号中的数字来过滤数据集。我已经尝试过了,但是没有用到:

代码语言:javascript
复制
SELECT ID, Product
FROM DAT
WHERE product like '%[(][0-9][)]';
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-03-09 01:21:45

您可以尝试使用RLIKE来匹配正则表达式模式:

代码语言:javascript
复制
SELECT ID, Product
FROM DAT
WHERE product RLIKE '\\([0-9]+\\)$';
票数 3
EN

Stack Overflow用户

发布于 2021-03-09 01:10:50

base R中,我们可以使用grepl来匹配开始括号(\\(),后跟一个或多个数字(\\d+),然后是字符串末尾的结束括号(\\)) ($

代码语言:javascript
复制
subset(df1, grepl("\\(\\d+\\)$", Product))
#    ID                                       Product
#6  6 METHYLPREDNISOLONE TAB THERAPY PACK 4 MG (21)
#7  7     DEXAMETHASONE TAB THERAPY PACK 1.5 MG (7)
#8  8                METHYLPREDNISOLONE DOSE P (16)
#9  9                             MILLIPRED DP (13)

数据

代码语言:javascript
复制
df1 <- structure(list(ID = 1:10, Product = c("VENLAFAXINE HCL CAP ER 24HR 37.5 MG (BASE EQUIVALENT)", 
"MINOXIDIL POWDER", "MENTHOL LOZENGE 10 MG", "ZINC CHLORIDE GRANULES", 
"CLOPIDOGREL BISULFATE TAB 75 MG (BASE EQUIV)", "METHYLPREDNISOLONE TAB THERAPY PACK 4 MG (21)", 
"DEXAMETHASONE TAB THERAPY PACK 1.5 MG (7)", "METHYLPREDNISOLONE DOSE P (16)", 
"MILLIPRED DP (13)", "ZONACORT 7 DAY")), class = "data.frame", row.names = c(NA, 
-10L))
票数 6
EN

Stack Overflow用户

发布于 2021-03-09 01:11:49

遗憾的是,SQL Server不支持正则表达式。但是你可以这样做:

代码语言:javascript
复制
WHERE product like '%([0-9]%)' AND
      product NOT LIKE '%(%[^0-9]%)'

第一个条件检查字符串末尾是否有中间有数字的圆括号。

第二个验证括号之间的所有字符都是数字。

也就是说,这并不完美,但如果product中没有其他括号,它就可以工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66534131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档