我在R中的dyplr中使用str_match从列中提取字符串并将其放入新列中。
完整字符串如下:
Chemical: (BETA-CYFLUTHRIN = 118831)
我只想要'BETA-CYFLUTHRIN'所以我正在尝试使用正则表达式来获取值(和=但我已经得到了
(BETA-CYFLUTHRIN =
我知道这可能是一个非常愚蠢的问题,但我一直在努力解决这个问题,但仍然看不到它。这是我到目前为止:有什么建议吗?谢谢!
ru2 <- ru2%>%mutate(chem2 = str_extract(chem, "[(](.*?) ="))
答案 0 :(得分:1)
改为使用str_match
,然后获取第二个值。您根本不需要更改模式:
x <- "Chemical: (BETA-CYFLUTHRIN = 118831)"
str_match(x, "[(](.*?) =")
[,1] [,2]
# [1,] "(BETA-CYFLUTHRIN =" "BETA-CYFLUTHRIN"
str_match(x, "[(](.*?) =")[1,2]
# [1] "BETA-CYFLUTHRIN"
这是有效的,因为str_match
旨在提取捕获组(()
内的事物),这对R中的正则表达式函数确实非常有用。
答案 1 :(得分:1)
您仍然可以使用str_extract
,但是您需要使用零宽度断言来仅在某个上下文中抓取一个模式:
str_extract(chem, "(?<=\\().*?(?= =)")
模式匹配:
(?<=\\()
- 当前位置左侧必须有(
字符.*?
- 尽可能少地匹配换行符以外的任何0 +字符(?= =)
- 当前位置右侧必须有一个空格=
。<强> See the regex demo 强>
基础R等价物可能看起来像
regmatches(x, regexpr("(?<=\\().*?(?= =)", x, perl=TRUE))
# => [1] "BETA-CYFLUTHRIN"