Regex 模式匹配以提取字符串匹配条件

Regex 模式匹配以提取字符串匹配条件,regex,r,Regex,R,我试图提取与字符串中的模式匹配的字符串。有意义的是: x <- "this.is.fairly//Whatit.is/path/IDbeginUntilhere7/seenit" 我理解它不起作用,因为 i 位于字符串的中间。这个问题可能太简单了,但我希望能得到任何帮助。很明显,主要问题是锚:字符串的开头^和字符串的结尾$ 第二个问题是贪心点,它也将在/分隔的子部分之间匹配(即,将匹配整个Id7/不匹配7,而不是Id7) 你需要使用类似于 str <- regmatches(x,

我试图提取与字符串中的模式匹配的字符串。有意义的是:

 x <- "this.is.fairly//Whatit.is/path/IDbeginUntilhere7/seenit"

我理解它不起作用,因为<代码> i <代码>位于字符串的中间。这个问题可能太简单了,但我希望能得到任何帮助。

很明显,主要问题是锚:字符串的开头
^
和字符串的结尾
$

第二个问题是贪心点,它也将在
/
分隔的子部分之间匹配(即,将匹配整个
Id7/不匹配7
,而不是
Id7

你需要使用类似于

str <- regmatches(x, gregexpr("I[^/]*7", x))

请参见

省略^和$。它们指定模式从字符串的开头开始,并在字符串的结尾结束。谢谢。那么问题真的很简单!如果是非贪婪的
str更好,我会使用
stringr
软件包,因为它更干净、更容易阅读:
str_extract(x,“I.*7”)
。谢谢各位,你们能发布建议来结束这个问题吗。@马里亚诺:我纠正了问题中的一个错误。模式是
IDBEGINUNTHERE
,我认为条件以
I
开始,以
7
结束就足够了。我们还可以要求字符串位于
/
之间。
str <- regmatches(x, gregexpr("I[^/]*7", x))
str <- regmatches(x, gregexpr("I[^/]*(?=7)", x, perl=TRUE))