Julia Language
Regexes
Suche…
Syntax
- Regex ("[Regex]")
- r "[Regex]"
- Streichholz (Nadel, Heuhaufen)
- Matchall (Nadel, Heuhaufen)
- Eachmatch (Nadel, Heuhaufen)
- Ismatch (Nadel, Heuhaufen)
Parameter
Parameter | Einzelheiten |
---|---|
needle | die Regex im haystack suchen |
haystack | der Text, in dem nach der needle |
Regex-Literale
Julia unterstützt reguläre Ausdrücke 1 . Die PCRE-Bibliothek wird als Regex-Implementierung verwendet. Regexe sind wie eine Minisprache innerhalb einer Sprache. Da die meisten Sprachen und viele Texteditoren Unterstützung für reguläre Ausdrücke bieten, sind Dokumentation und Beispiele für die Verwendung von regulärer Expression im Allgemeinen nicht in diesem Beispiel enthalten.
Es ist möglich, eine Regex
mithilfe des Konstruktors aus einer Zeichenfolge zu Regex
:
julia> Regex("(cat|dog)s?")
Der @r_str
kann jedoch das @r_str
String-Makro verwendet werden:
julia> r"(cat|dog)s?"
1 : Technisch unterstützt Julia Ausdrücke, die sich von den in der Sprachtheorie genannten regulären Ausdrücken unterscheiden. Häufig wird der Begriff "regulärer Ausdruck" auch für Regex verwendet.
Übereinstimmungen finden
Es gibt vier Hauptfunktionen für reguläre Ausdrücke, die alle Argumente in needle, haystack
annehmen. Die Begriffe "Nadel" und "Heuhaufen" stammen aus der englischen Redewendung "Nadel im Heuhaufen finden". Im Zusammenhang mit Regex ist der Regex die Nadel und der Text der Heuhaufen.
Die match
Funktion kann verwendet werden, um die erste Übereinstimmung in einer Zeichenfolge zu finden:
julia> match(r"(cat|dog)s?", "my cats are dogs")
RegexMatch("cats", 1="cat")
Mit der matchall
Funktion können Sie alle Übereinstimmungen eines regulären Ausdrucks in einem String suchen:
julia> matchall(r"(cat|dog)s?", "The cat jumped over the dogs.")
2-element Array{SubString{String},1}:
"cat"
"dogs"
Die ismatch
Funktion gibt einen Booleschen ismatch
zurück, der angibt, ob eine Übereinstimmung in der Zeichenfolge gefunden wurde:
julia> ismatch(r"(cat|dog)s?", "My pigs")
false
julia> ismatch(r"(cat|dog)s?", "My cats")
true
Die eachmatch
Funktion gibt einen Iterator über RegexMatch
Objekte zurück, die für for
Schleifen geeignet sind :
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
Gruppen erfassen
Auf die von Capture-Gruppen erfassten RegexMatch
kann von RegexMatch
Objekten mithilfe der Indexierungsnotation RegexMatch
werden.
Beispielsweise analysiert der folgende Regex nordamerikanische Telefonnummern, die im (555)-555-5555
Format geschrieben wurden:
julia> phone = r"\((\d{3})\)-(\d{3})-(\d{4})"
Angenommen, wir möchten die Telefonnummern aus einem Text extrahieren:
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"
Mit der matchall
Funktion können wir ein Array der Teilzeichenfolgen selbst erhalten:
julia> matchall(phone, text)
2-element Array{SubString{String},1}:
"(555)-505-1000"
"(555)-999-9999"
Angenommen, wir möchten auf die Vorwahlnummern (die ersten drei Ziffern, in Klammern eingeschlossen) zugreifen. Dann können wir den eachmatch
Iterator verwenden:
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
Beachten Sie hierbei, dass wir m[1]
da die Vorwahl die erste Erfassungsgruppe in unserem regulären Ausdruck ist. Wir können alle drei Komponenten der Telefonnummer über eine Funktion als Tupel abrufen:
julia> splitmatch(m) = m[1], m[2], m[3]
splitmatch (generic function with 1 method)
Dann können wir eine solche Funktion auf ein bestimmtes RegexMatch
:
julia> splitmatch(match(phone, text))
("555","505","1000")
Oder wir könnten map
es in jedem Spiel:
julia> map(splitmatch, eachmatch(phone, text))
2-element Array{Tuple{SubString{String},SubString{String},SubString{String}},1}:
("555","505","1000")
("555","999","9999")