拉出短语-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
解决方案

你可以用


xA
stringr
解决方案

你可以用


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
所以我把
+
放在这里,试试这个正则表达式:
(?