繁体   English   中英

正则表达式选择多个组

[英]regex select multiple groups

我有以下字符串,要从其中提取第二对冒号之间的内容(示例中的粗体):

“ 20160607181026_0000005:0607181026000000501: ES5206956802492 :479”

我正在使用R特别是stringr包来操作字符串。 我尝试使用的命令是:

str_extract(“ 20160607181026_0000005:0607181026000000501:ES5206956802492:479”,“:(。*):”)

正则表达式模式在命令末尾表示。 这将产生以下结果:

“:0607181026000000501:ES5206956802492:”

我知道有一种将结果分组并向后引用的方法,这将使我只能选择我感兴趣的部分,但似乎无法找出正确的语法。

我该如何实现?

此外wordstringr

library(stringr)
word(v1, 3, sep=':')
#[1] "ES5206956802492"

如果:之后的第一个字符以LETTERS开头,那么我们可以使用紧凑的正则表达式。 在这里,我们使用正则表达式环视( (?<=:) )并匹配紧跟: [AZ][AZ] ),再加上不是:[^:]+ )的多个字符之一。

str_extract(v1, "(?<=:)[A-Z][^:]+")
#[1] "ES5206956802492"

或者如果它是基于所述位置即第二位置时,一个base R的选择将是匹配的零个或多个非:[^:]* ),接着由第一:后跟零个或多个非:接着是第二:与那么,我们捕捉到非:一组( (...)和随后的字符休息( .* )。 在替换中,我们使用后向引用,即\\\\1 (第一个捕获组)。

sub("[^:]*:[^:]*:([^:]+).*", "\\1", v1)
#[1] "ES5206956802492"

或者可以捕获重复部分以使其紧凑

sub("([^:]*:){2}([^:]+).*", "\\2", v1)
#[1] "ES5206956802492"

或使用strsplit ,我们在定界符处分割:并提取第三个元素。

strsplit(v1, ":")[[1]][3]
#[1] "ES5206956802492"

数据

v1 <- "20160607181026_0000005:0607181026000000501:ES5206956802492:479"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM