拉出短语-Regex R之前的文本
我希望在拉出短语-Regex R之前的文本,r,regex,stringr,R,Regex,Stringr,我希望在R中使用正则表达式提取出现在一组短语之前的文本 示例短语c(“短语1”、“短语2”、“短语3”) 示例文本: *NAME ALPHA PHRASE1 BLA BLA TEXT 81249 *NAME BETA PHRASE1 BLA BLA 81229 *NAME GAMMA PHRASE2 BLA BLA TEXT 85129 *NAME DELTA PHRASE3 BLA BLA 86129 *NAME EPSILON PHRASE2 BLA BLA 81729 我想提取以下c(“
R
中使用正则表达式提取出现在一组短语之前的文本
示例短语c(“短语1”、“短语2”、“短语3”)
示例文本:
*NAME ALPHA PHRASE1 BLA BLA TEXT 81249
*NAME BETA PHRASE1 BLA BLA 81229
*NAME GAMMA PHRASE2 BLA BLA TEXT 85129
*NAME DELTA PHRASE3 BLA BLA 86129
*NAME EPSILON PHRASE2 BLA BLA 81729
我想提取以下c(“名称ALPHA”、“名称BETA”、“名称GAMMA”)
等等(忽略*
)
regex101链接:
初始尝试
(!\*)q+(?=PHRASE1)
在R
中:
str_extract(x, "(!\*)q+(?=PHRASE1)")
A
stringr
解决方案
你可以用
xAstringr
解决方案
你可以用
x将我的评论转换为答案,以便将来的访问者可以轻松找到解决方案
您可以使用lookback和lookahead使用此正则表达式:
str_extract(x),(?将我的评论转换为答案,以便为未来的访问者找到解决方案
您可以使用lookback和lookahead使用此正则表达式:
str_extract(x,”(?替换为strsplit()
然后删除尾随空格
代码
sapply(str2, function(z){
# remove * and whitespaces
gsub("[*]|\\s+$", "",
# split by phrase and choose part of interest
sapply(strsplit(str1, z)[grepl(z, str1)], "[[", 1))
})
# $PHRASE1
# [1] "NAME ALPHA" "NAME BETA"
# $PHRASE2
# [1] "NAME GAMMA" "NAME EPSILON"
# $PHRASE3
# [1] "NAME DELTA"
数据
str1 <- c("*NAME ALPHA PHRASE1 BLA BLA TEXT 81249",
"*NAME BETA PHRASE1 BLA BLA 81229",
"*NAME GAMMA PHRASE2 BLA BLA TEXT 85129",
"*NAME DELTA PHRASE3 BLA BLA 86129",
"*NAME EPSILON PHRASE2 BLA BLA 81729")
str2 <- c("PHRASE1", "PHRASE2", "PHRASE3")
str1替换为strsplit()
,然后删除尾随空格
代码
sapply(str2, function(z){
# remove * and whitespaces
gsub("[*]|\\s+$", "",
# split by phrase and choose part of interest
sapply(strsplit(str1, z)[grepl(z, str1)], "[[", 1))
})
# $PHRASE1
# [1] "NAME ALPHA" "NAME BETA"
# $PHRASE2
# [1] "NAME GAMMA" "NAME EPSILON"
# $PHRASE3
# [1] "NAME DELTA"
数据
str1 <- c("*NAME ALPHA PHRASE1 BLA BLA TEXT 81249",
"*NAME BETA PHRASE1 BLA BLA 81229",
"*NAME GAMMA PHRASE2 BLA BLA TEXT 85129",
"*NAME DELTA PHRASE3 BLA BLA 86129",
"*NAME EPSILON PHRASE2 BLA BLA 81729")
str2 <- c("PHRASE1", "PHRASE2", "PHRASE3")
str1模式中的q
是什么?!\*
匹配一个!*
字符串,您的字符串中没有它。请注意,您需要在常规字符串文本中使用双反斜杠来定义文本反斜杠(正则表达式转义部分)对不起,我对regex很陌生,但是你知道q
匹配q
字符吗?你是什么意思?从*
开始匹配任何类型的字符尽可能少?或者空格分隔的单词序列?我试图在短语1
开始之前提取所有字符,所以我想要所有字符>q
所以我把+
放在这个正则表达式中:(?模式中的q
是什么?!\*
匹配一个!*
字符串,你的字符串中没有它。注意,你需要在常规字符串文本中使用双反斜杠来定义一个文本反斜杠(正则表达式转义部分)对不起,我对regex很陌生,但是你知道q
匹配q
字符吗?你是什么意思?从*
开始匹配任何类型的字符尽可能少?或者空格分隔的单词序列?我试图在短语1
开始之前提取所有字符,所以我想要所有字符>q
所以我把+
放在这里,试试这个正则表达式:(?