我想找到一个与下面字符串中的粗体文本匹配的正则表达式。
"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
作为一个整体