R 正则表达式,一对单词的第一个、第二个、第三个等出现之间的匹配
我想找到一个与下面字符串中粗体文本匹配的正则表达式 “A1文本:XXX\r\n状态:No\r\n信息:YYYY\r\n UUU结束A2文本:BBB\r\n状态:是\r\n信息:VVVVV\r\n OOO结束A3 2020/2021” 我的问题是“Info”和“End”对之间的匹配。下面我的正则表达式匹配第一次出现的“Info”和最后一次出现的“End”之间的所有内容。我希望它匹配第一个“Info”和下一个“End”。之后是下一个“Info”和后面的“End”R 正则表达式,一对单词的第一个、第二个、第三个等出现之间的匹配,r,regex,R,Regex,我想找到一个与下面字符串中粗体文本匹配的正则表达式 “A1文本:XXX\r\n状态:No\r\n信息:YYYY\r\n UUU结束A2文本:BBB\r\n状态:是\r\n信息:VVVVV\r\n OOO结束A3 2020/2021” 我的问题是“Info”和“End”对之间的匹配。下面我的正则表达式匹配第一次出现的“Info”和最后一次出现的“End”之间的所有内容。我希望它匹配第一个“Info”和下一个“End”。之后是下一个“Info”和后面的“End” string <- "
string <- "A1 text: XXX \r\n Status: No \r\n Info: YYYY \r\n UUUU End A2 text: BBB \r\n Status: Yes \r\n Info: VVV \r\n 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 \r\n UUUU"
[2,] "BBB " "Yes " "VVV \r\n OOO"
string您可以使用
字符串[,1][,2][,3]
#=>[1,]XXX“否”YYYY\r\n uuu
#=>[2,]“BBB”“是”“VVV\r\n OOO”
正则表达式是
(?s)文本:\h*(.*)\R\s*状态:\h*([^\R\n]*)\R\s*信息:\h*(.*)\s*结束\b
详情如下:
(?s)
-内联dotall修饰符
文本:
-文字文本
\h*
-0+水平空白
(.*)
-第1组:任何零个或多个字符,尽可能少
\R
-任何换行顺序
\s*
-任何0+空格
状态:\h*
-状态:
和0+水平空白
([^\r\n]*)
-第2组:除CR和LF之外的任何零个或多个字符
\R
-任何换行顺序
\s*
-任何0+空格
Info:\h*
-Info:
和0+水平空格
(.*)
-第3组:任何零个或多个字符,尽可能少
\s*End\b
-0+空格,End
作为一个整体
谢谢!太棒了。有一个问题:为什么它可以使用,dotall=T))[[1]][,-1]?为什么我需要lappy?@Henrikstr_match\u all(string,“(?s)text:\\h*(?)\\R\\s*状态:\\h*(?)\\R\\s*信息:\\h*(?)\\s*End\\b][[1][,-1]
在我这方面效果很好。你重新分配了T
吗?永远不要使用T
,始终使用完整的TRUE
。