首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R regex Lookbehind Look预报问题

R regex Lookbehind Look预报问题
EN

Stack Overflow用户
提问于 2014-10-26 13:41:41
回答 2查看 595关注 0票数 0

我试图从R中的文本中提取像44.11.36.00-1这样的段落(准确地说,nn.nn.nn.nn-n,其中n代表从0到9中的任意数字)。

如果它们被“粘贴”在非数字标记上,我想提取段落:

  • 44.11.36.00-1中提取nsfghstighsl44.11.36.00-1vsdfgh是可以的
  • 44.11.36.00-1中提取的fa0044.11.36.00-1000不是

我读到str_extract_all没有使用LookbehindLookahead表达式,所以我遗憾地回到了grep,但无法处理它:

代码语言:javascript
复制
> pattern1 <- "(?<![0-9]{1})[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}-[0-9]{1}(?![0-9]{1})"
> grep(pattern1, "dyj44.11.36.00-1aregjspotgji 44113600-1 agdtklj441136001 ", perl=TRUE, value = TRUE)

[1] "dyj44.11.36.00-1aregjspotgji 44113600-1 agdtklj441136001 "

这不是我所期望的结果。

我以为:

  • (?<![0-9]{1})的意思是“不以数字为先导的匹配表达式”。
  • [0-9]{2}\\.[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}-[0-9]{1}代表我所寻求的表达式
  • (?![0-9]{1})的意思是“匹配表达式,后面没有数字”。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-26 13:55:37

正如@Roland在他的评论中所说,你需要使用regmatches而不是grep

代码语言:javascript
复制
> s <- "nsfghstighsl44.11.36.00-1vsdfgh"
> m <- gregexpr("(?<![0-9]{1})[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}\\.[0-9]{2}-[0-9]{1}(?![0-9]{1})", s, perl=TRUE)
> regmatches(s, m)
[1] "44.11.36.00-1"

一个缩小的,

代码语言:javascript
复制
> x <- c('nsfghstighsl44.11.36.00-1vsdfgh', 'fa0044.11.36.00-1000')
> m <- gregexpr("(?<!\\d)\\d{2}\\.\\d{2}\\.\\d{2}\\.\\d{2}-\\d(?!\\d)", x, perl=TRUE)
> regmatches(x, m)
[1] "44.11.36.00-1"
票数 2
EN

Stack Overflow用户

发布于 2014-10-26 13:58:05

实际上,您不需要使用这种方法进行前瞻性或后置。只需插入要提取的部分:

代码语言:javascript
复制
library(gsubfn)
x <- c("nsfghstighsl44.11.36.00-1vsdfgh", "fa0044.11.36.00-1000") # test data

pat <- "(^|\\D)(\\d{2}[.]\\d{2}[.]\\d{2}[.]\\d{2}-\\d)(\\D|$)"
strapply(x, pat, ~ ..2, simplify = c)

## "44.11.36.00-1"

注意,~ ..2是函数function(...) ..2的缩写,这意味着获取正则表达式中第二个括号部分的匹配。我们也可以编写function(x, y, z) yx + y + z ~ y

注意:,这个问题似乎是说,非数字必须直接出现在字符串之前和之后,但是基于已经消失的注释,似乎真正想要的是字符串要么在开始,要么在一个非数字之后,必须在末尾或者由一个非数字折叠。答案已被如此修改。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26573611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档