es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Optimización de una expresión regular en R para la extracción de subcadenas.

Tengo una pregunta de seguimiento sobre una respuesta anterior que se puede encontrar aquí: https://stackoverflow.com/q/69921210/3832970

En resumen, quería extraer el texto en negrita de una cadena que sigue este patrón:

sp|Q2UVX4|CO3_BOVIN Complement C3 OS=Bos taurus OX=9913 GN=C3 PE=1 SV=2

Aquí hay una parte de la respuesta proporcionada por Martin Gal:

protein_name = ifelse(str_detect(string, “._BOVIN\s(.?)\sOS=.“),
str_replace(string, “.
BOVIN\s(.?)\sOS=.“, “\1”),
NA_character
),

Su respuesta fue excelente, pero a veces tengo una mezcla de especies (por ejemplo: BOVIN y HUMAN), así que quise hacer el código un poco más flexible. Intenté solo con espacio (\s) y letras mayúsculas con espacio ([A-Z]\s) pero el primero falló y el segundo fue inexacto para algunas cadenas. Luego mezclé el enfoque de Martin con una cadena que termina en letras mayúsculas, con el objetivo de seleccionar el primer fragmento completo como delimitador (por ejemplo, sp|Q2UVX4|CO3_BOVIN).

A esto:

protein_name = ifelse(str_detect(string, “[a-z]{2}\|(.?)[A-Z]\s(.?)\sOS=.“),
str_replace(string, “[a-z]{2}\|(.
?)[A-Z]\s(.?)\sOS=.“, “\2”)

En este caso, ¿cuál sería la mejor manera de seleccionar todo lo que está entre los dos patrones? Los dos patrones son “sp” y una letra mayúscula seguida de un espacio.
Usé (.*?), ¿es este el mejor enfoque?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La mejor manera de seleccionar todo lo que está entre dos patrones es usando una expresión regular que busca dos caracteres seguidos por una barra vertical ([a-z]{2}\|) seguido por cualquier carácter (.) cualquier número de veces () seguido de una letra mayúscula ([A-Z]) seguido de un espacio (\s). Esto se puede escribir como [a-z]{2}\|.[A-Z]\s.

    Usando (.*?) es un buen enfoque, ya que es una coincidencia no codiciosa, lo que significa que coincidirá con la menor cantidad posible de caracteres.

Comments are closed.