2015-09-21 3 views
2

Imaginez que j'ai plusieurs chaînes de caractères dans une liste comme celle-ci:séquençage Détection en utilisant des expressions rationnelles

[[1]] 
[1] "1-FA-1-I2-1-I2-1-I2-1-EX-1-I2-1-I3-1-FA-1-" 
[2] "-1-I2-1-TR-1-"        
[3] "-1-I2-1-FA-1-I3-1-"       
[4] "-1-FA-1-FA-1-NR-1-I3-1-I2-1-TR-1-"   
[5] "-1-I2-1-"         
[6] "-1-I2-1-FA-1-I2-1-"       
[7] "-1-I3-1-FA-1-QU-1-"       
[8] "-1-I2-1-I2-1-I2-1-NR-1-I2-1-I2-1-NR-1-"  
[9] "-1-I2-1-"         
[10] "-1-NR-1-I3-1-QU-1-I2-1-I3-1-QU-1-NR-1-I2-1-" 
[11] "-1-NR-1-QU-1-QU-1-I2-1-" 

Je veux utiliser une expression régulière pour détecter les chaînes particulières où un certain substring précède une autre sous-chaîne, mais pas nécessairement directement précédant l'autre sous-chaîne. Par exemple, disons que nous recherchons FA précédant EX. Cela devrait correspondre à 1 dans la liste. Même si FA a -1-I2-1-I2-1-I2-1- entre lui-même et EX, le FA se produit toujours avant le EX, d'où une correspondance est attendue.

Comment une expression régulière générique peut-elle être définie pour identifier des chaînes où certaines sous-chaînes apparaissent avant une autre sous-chaîne de cette manière?

Répondre

8

Vous pouvez utiliser grep.

x <- c("1-FA-1-I2-1-I2-1-I2-1-EX-1-I2-1-I3-1-FA-1-" ,"-1-I2-1-TR-1-") 
grepl("FA.*EX", x) 
#[1] TRUE FALSE 
grep("FA.*EX", x) 
#[1] 1