En un documento, estoy tratando de buscar las ocurrencias de un 12-cadena de dígitos que contiene alfa y números. Una cadena de ejemplo es: «PXB111X2206»

Estoy tratando de conseguir los números de línea que contienen esta cadena en R usando el siguiente:

FileInput = readLines("File.txt") 
prot_pattern="([A-Z0-9]{12})";
prot_string<-grep(prot_pattern,FileInput)
prot_string

Esto funcionó bien hasta que llego a un documento que contiene todos mayúsculas los títulos y devuelve una línea que contiene la palabra «CONCENTRATIO»

La cadena estoy tratando de buscar es: «PXB111X2206». Estoy esperando el grep para devolver el número de líneas que contienen la cadena : «PXB111X2206». No obstante, se devuelve el número de línea que contiene la palabra: «CONCENTRATIO»

Lo que está mal con mi expresión anterior? Alguna idea de lo que estoy haciendo mal aquí?

Aquí una muestra de la entrada:
Cada objetivo de diseño descrito en este documento es de gran importancia, sin embargo, es sólo un aspecto de lo que se necesita para lograr un proyecto exitoso.

Un proyecto exitoso es aquel donde los objetivos del proyecto son identificados desde el principio y donde el >la interdependencia de todos los sistemas del edificio son coordinados simultáneamente desde la planificación y la fase de programación.

CONCENTRACIÓN:

Las áreas de concentración para el diseño de objetivos: accesible, estética, rentable, >funcional y operativa, la preservación histórica, productivo, seguro/segura, sostenible y >sus interrelaciones debe ser entendido, evaluados, y se aplique adecuadamente.

Cada uno de estos objetivos de diseño se presenta en el diseño de los objetivos de número de documento. >PXB111X2206.
>

Gracias & Saludos,
Simak

InformationsquelleAutor BRZ | 2013-07-23

2 Comentarios

  1. 3

    Usted está utilizando una herramienta muy poderosa para una tarea muy sencilla, la expresión

    [A-Z0-9]{12}

    se adaptan a cualquier alfanumérico 12 tamaño uppercased cadena, por ejemplo, la palabra «CONCENTRATIO», sin embargo, su «PXB111X2206» no es ni siquiera de 12 símbolos de largo, por lo que no es posible que se busca. Si sólo desea hacer coincidir «PXB111X2206» usted sólo tiene que utilizar como una expresión regular, por ejemplo, si el contenido de los archivos:

    foo
    CONCENTRATIO. 
    bazz
    foo bar bazz PXB111X2206 foo bar bazz
    foo 
    bar
    bazz

    y uso:

    grep('PXB111X2206',readLines("File.txt"))

    entonces R sólo coincidirá con la línea 4 como sería de desear.

    EDITAR

    Si usted está buscando para ese patrón específico a tratar:

    grep('[A-Z]{3}[0-9]{3}[A-Z]{1}[0-9]{4}',readLines("File.txt"))

    Que la expresión coincidirá con cadenas como ‘AAADDDADDDD’ donde a es una letra mayúscula, y D un dígito, la expresión regular contiene un grupo (símbolos dentro de los corchetes) y un cuantificador (el número dentro del paréntesis) que cuenta cómo muchos de los anteriores símbolo de la expresión aceptar, si no cuantificador está presente se asume que es 1.

    • Gracias…pero yo no estoy buscando que la cadena específica..pero una cadena que contiene alfa-los números como: PXB111X2206. Así, la regexp. Gracias…
    • He editado la respuesta, espero que sea de ayuda, la pregunta era un poco de miss líder: «La cadena estoy tratando de buscar es: ‘PXB111X2206’.»
    • Lo siento por la confusión y gracias por la Edición. Estoy seguro de que va a funcionar. Voy a echarle un vistazo y volver..Gracias de nuevo!
    • Gracias por tu ayuda..Esto funciona….Saludos,simak
    • Fue muy útil para aprender el siguiente fragmento de código: grep("pattern",readLines("filename")) Muy útil, de verdad!
  2. 0

    Echemos un vistazo a lo habitual de su medio de expresión. [A-Z0-9] significa cualquier mayúscula letra o un número y {12} significa la expresión anterior debe ocurrir exactamente 12 veces. La cadena de CONCENTRATIO es de 12 capitaized letras, así que no es sorpresa que grep recoge. Si usted desea llevar a cabo los partidos que coinciden sólo letras o números que usted podría intentar algo como

    allleters <- grep("[A-Z]{12}",strings)
    allnumbers <-grep("[0-9]{12}",strings)
    both <- grep("[A-Z0-9]{12}",strings)

    los partidos que quería, entonces sería algo así como

    both <- both[!both %in% union(allletters,allnumbers)]

    Alguien con mejor regexfu podría tener una solución más elegante, pero esto va a funcionar también.

    • Gracias..voy a dar a este un tiro..

Dejar respuesta

Please enter your comment!
Please enter your name here