R中的正则表达洞察力

时间:2016-10-06 08:40:42

标签: r regex

假设我有一个字符串:

string = "VNYTQAKENGSD"

我需要找到这个表达式所持的位置。

N {P} [ST] {P}(含义4个字母,[N,¬P,S或T,¬P]

输出为

2 9

因为在第2位你有NYTQ和9 NGSD

如何在正则表达式中写这个?

regex视为常规表达式

 for(i in 1:nchar(string)){

 # If regex is equal to the substring of REGEX, get index.
   if(regex == substr(string, 1, nchar(regex))){
   vector = c(vector,i)
   } 

 #Reduce String
 string = substring(string,2)
 }  

请帮忙

1 个答案:

答案 0 :(得分:1)

澄清之后,很明显你需要像

那样的正则表达式
N[A-OQ-Z][ST][A-OQ-Z]

请参阅the regex demo

<强>详情:

  • N - 匹配1次N
  • [A-OQ-Z] - 一个字符类,它匹配从AO以及QZ
  • 的1个ASCII大写字母
  • [ST] - 与ST匹配的字符类
  • [A-OQ-Z] - 同上。

在regular-expressions.info上查看有关character classes的更多信息。

在R中(见online demo):

string <- "VNYTQAKENGSD"
z <- gregexpr("N[A-OQ-Z][ST][A-OQ-Z]", string)
z[[1]][1:length(z[[1]])]
## => [1] 2 9