我想在" one:" 和"二:" 之间以及"二:" 和"三:" 在字符串 s1 &#34 ;一:bla 1二:bla2三:bla3" 。但是"二:bla2" 不一定出现在字符串 s2 中。所以如果它是 s2 "一个:bla 1三:bla3" 它也应该有效。
我已经提出了以下R代码,但我尝试使用"两个附加括号:..." 和问号不起作用:
library(gsubfn)
s1 <- "one: bla 1 two: bla2 three: bla3"
s2 <- "one: bla 1 three: bla3"
strapplyc(s1, "one: (.*) (two: (.*))? three: (.*)")
strapplyc(s2, "one: (.*) (two: (.*))? three: (.*)")
答案 0 :(得分:2)
问题可能是.*
之后的one:
也在使用two:
部分及其之后的文字。例如,您的行中的匹配组将是
1: "bla 1 two: bla2"
2: [empty]
3: "bla3"
您可以通过使用问号使第一个星号非贪婪来解决此问题。
其他一些观点:我认为你应该将空格放在two:
部分的括号内,否则当它不可用时,one:
和{{1}之间必须有两个空格部分。
此外,对于较小的整理,您可以使用two:
使可选部分周围的括号无法捕捉。您只想捕获三件事,?:
部分周围的括号仅用于优先级,因此无需捕获。
总而言之,你会有这样的事情:
two: