Buscar..


Sintaxis

  • Regex ("[regex]")
  • r "[regex]"
  • partido (aguja, pajar)
  • matchall (aguja, pajar)
  • eachmatch (aguja, pajar)
  • ismatch (aguja, pajar)

Parámetros

Parámetro Detalles
needle El Regex a buscar en el haystack
haystack El texto en el que buscar la needle

Literales regex

Julia soporta expresiones regulares 1 . La biblioteca PCRE se utiliza como la implementación de expresiones regulares. Las expresiones regulares son como un mini-lenguaje dentro de un idioma. Dado que la mayoría de los idiomas y muchos editores de texto brindan soporte para expresiones regulares, la documentación y los ejemplos de cómo usar expresiones regulares en general están fuera del alcance de este ejemplo.

Es posible construir un Regex partir de una cadena usando el constructor:

julia> Regex("(cat|dog)s?")

Pero por conveniencia y más fácil de escapar, la macro de cadena @r_str puede usarse en su lugar:

julia> r"(cat|dog)s?"

1 : Técnicamente, Julia admite expresiones regulares, que son distintas y más poderosas de lo que se llaman expresiones regulares en la teoría del lenguaje. Con frecuencia, el término "expresión regular" se usará para referirse a expresiones regulares también.

Encontrar coincidencias

Existen cuatro funciones principales de utilidad para expresiones regulares, todas las cuales toman argumentos en orden de needle, haystack . La terminología "aguja" y "pajar" provienen del idioma inglés "encontrar una aguja en un pajar". En el contexto de las expresiones regulares, la expresión regular es la aguja y el texto es el pajar.

La función de match se puede utilizar para encontrar la primera coincidencia en una cadena:

julia> match(r"(cat|dog)s?", "my cats are dogs")
RegexMatch("cats", 1="cat")

La función matchall se puede usar para encontrar todas las coincidencias de una expresión regular en una cadena:

julia> matchall(r"(cat|dog)s?", "The cat jumped over the dogs.")
2-element Array{SubString{String},1}:
 "cat" 
 "dogs"

La función ismatch devuelve un valor booleano que indica si se encontró una coincidencia dentro de la cadena:

julia> ismatch(r"(cat|dog)s?", "My pigs")
false

julia> ismatch(r"(cat|dog)s?", "My cats")
true

El eachmatch función devuelve un iterador sobre RegexMatch objetos, adecuado para uso con for bucles :

julia> for m in eachmatch(r"(cat|dog)s?", "My cats and my dog")
           println("Matched $(m.match) at index $(m.offset)")
       end
Matched cats at index 4
Matched dog at index 16

Grupos de captura

Las subcadenas capturadas por los grupos de captura son accesibles desde los objetos RegexMatch usando notación de indexación.

Por ejemplo, las siguientes (555)-555-5555 números de teléfono de América del Norte escritos en formato (555)-555-5555 :

julia> phone = r"\((\d{3})\)-(\d{3})-(\d{4})"

y supongamos que deseamos extraer los números de teléfono de un texto:

julia> text = """
       My phone number is (555)-505-1000.
       Her phone number is (555)-999-9999.
       """
"My phone number is (555)-505-1000.\nHer phone number is (555)-999-9999.\n"

Usando la función matchall , podemos obtener una serie de subcadenas que coincidan:

julia> matchall(phone, text)
2-element Array{SubString{String},1}:
 "(555)-505-1000"
 "(555)-999-9999"

Pero supongamos que queremos acceder a los códigos de área (los tres primeros dígitos, entre paréntesis). Entonces podemos usar el iterador eachmatch :

julia> for m in eachmatch(phone, text)
           println("Matched $(m.match) with area code $(m[1])")
       end
Matched (555)-505-1000 with area code 555
Matched (555)-999-9999 with area code 555

Tenga en cuenta que usamos m[1] porque el código de área es el primer grupo de captura en nuestra expresión regular. Podemos obtener los tres componentes del número de teléfono como una tupla usando una función:

julia> splitmatch(m) = m[1], m[2], m[3]
splitmatch (generic function with 1 method)

Entonces podemos aplicar dicha función a un RegexMatch particular:

julia> splitmatch(match(phone, text))
("555","505","1000")

O podríamos map en cada partido:

julia> map(splitmatch, eachmatch(phone, text))
2-element Array{Tuple{SubString{String},SubString{String},SubString{String}},1}:
 ("555","505","1000")
 ("555","999","9999")


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow