我有一个字符串,其形式为:CCD_ 1。CCD_ 2总是存在的,但是其它部分可能存在也可能不存在。有时(blah)
后面只有很大的空间,有时还有更多的文本。
我试图只得到第二个括号中的whats,在这种情况下是blah
。我(在这个网站上的人的帮助下(已经到了拥有这个正则表达式的地步:
gsub(".*text\((.{5})\)(?:\((.{5})\).*)?", "\2", string)
如果(stuff)
和(blahh)
都存在但空间和text3
不存在则给出期望的结果。这个
gsub(".*text2\((.{5})\)(?:\((.{5})\))?.*", "\2", string)
如果只有stuff
存在,则不给予任何回报,这是我想要的,但如果两者都存在,则也不给予任何东西。
如果有人能帮我找出如何只获得blah
,我将不胜感激。
您可以使用
string <- "text1 text2(stuff)(blahh) text3"
sub(".*text2\([^()]*\)(?:\(([^()]*)\))?.*", "\1", string, perl=TRUE)
# => blah
请参阅regex演示和R演示。
详细信息
string <- "text1 text2(stuff)(blahh) text3"
0-尽可能多的任何0个或多个字符(换行字符除外(text2\(
-文字text2(
文本[^()]*
-除(
和)
之外的零个或多个字符)
-一个)
字符(?:(([^()]*)))?
-可选的非捕获组:(
-一个text2(stuff)
0字符([^()]*)
-第1组(替换模式中的1
指的是使用该组捕获的文本(:除(
和)
之外的零个或多个字符)
-)
字符
.*
-尽可能多的任意0个或多个字符(换行字符除外(