r-正则表达式,一对单词的第一次、第二次、第三次等出现之间的匹配



我想找到一个与下面字符串中的粗体文本匹配的正则表达式。

"A1文本:XXX\r\n状态:\r\n信息:YYYY\r\n UUUU结束A2文本:BBB>\r\n状态:<strong]是>\ r\n信息:VVV\r\n OOO终止A3 2020/2021";

我的问题是两人之间的匹配;信息";以及";终止下面的正则表达式匹配第一次出现的";信息";以及"0"的最后一个;结束";。我希望它与第一个";信息";并且下一个";结束";。此后;信息";以及";结束";之后。

string <- "A1 text: XXX rn Status: No rn Info: YYYY rn UUUU End A2 text: BBB rn Status: Yes rn Info: VVV rn OOO End A3 2020/2021"
str_match_all(string, regex("text: *([^\r\n]+?)\r\n.*?Status: *([^\r\n]+?)\r\n.",
dotall=T))[[1]][,-1]
str_match_all(string, regex("(?<=Info)(.*)(?=End)",
dotall=T))[[1]][,-1]

I want a expression like this: 
str_match_all(string, regex("text: *([^\r\n]+?)\r\n.*?Status: *([^\r\n]+?)\r\n.*?(?<=Info)(.*)(?=End)",   dotall=T))[[1]][,-1]
to return this:
[,1]   [,2]  [,3]
[1,] "XXX " "No " "YYYY rn UUUU"
[2,] "BBB " "Yes " "VVV rn OOO"

您可以使用

string <- "A1 text: XXX rn Status: No rn Info: YYYY rn UUUU End A2 text: BBB rn Status: Yes rn Info: VVV rn OOO End A3 2020/2021"
library(stringr)
res <- str_match_all(string, "(?s)text:\h*(.*?)\R\s*Status:\h*(.*?)\R\s*Info:\h*(.*?)\s*End\b")
lapply(res, function(m) m[,-1])
# => [[1]]
# =>      [,1]   [,2]   [,3]            
# => [1,] "XXX " "No "  "YYYY rn UUUU"
# => [2,] "BBB " "Yes " "VVV rn OOO"  

正则表达式是

(?s)text:h*(.*?)Rs*Status:h*([^rn]*)Rs*Info:h*(.*?)s*Endb

请参阅在线regex演示。详细信息:

  • (?s)-内联dotall修饰符
  • text:-文字
  • h*-0+水平空白
  • (.*?)-组1:任何零个或多个字符,尽可能少
  • R-任意断线序列
  • s*-任意0+空白
  • Status:h*-Status:与0+水平空白
  • ([^rn]*)-第2组:除CR和LF之外的任何零个或多个字符
  • R-任意断线序列
  • s*-任意0+空白
  • Info:h*-Info:与0+水平空白
  • (.*?)-第3组:任何零个或多个字符,尽可能少
  • s*Endb-0+空白,End作为一个整体

相关内容

  • 没有找到相关文章

最新更新