[PYTHON] Über die Angelegenheit, dass das re.compiled-Objekt für das re.match-Muster verwendet werden kann

Die Geschichte, wie man in die Ecke des Re-Moduls stößt

re_spam.py


# -*- coding: utf-8 -*-
import re

re.match("spa*m", "spam") #Verstehen

spam = re.compile("spa*m")
spam.match("spaaaaaaaam") #Verstehen

re.match(spam, "spaaaam") #Es funktioniert aus irgendeinem Grund

Das reguläre Ausdrucksobjekt, das durch re.compile wie oben beschrieben erhalten wurde, kann für das re.match-Muster verwendet werden. Es scheint, dass vorläufig bestimmt wird, ob das als Muster übergebene Objekt ein Objekt mit regulären Ausdrücken ist.

Gibt es einen Vorteil bei dieser Methode? Die Verarbeitungsgeschwindigkeit ist langsamer als bei Verwendung von re.match.

Überleitung

Dies ist die Quelle von Python-1.5.2 (Auszug)

re.py


def _cachecompile(pattern, flags=0):
    key = (pattern, flags)
    try:
        return _cache[key]
    except KeyError:
        pass
    value = compile(pattern, flags)
    if len(_cache) >= _MAXCACHE:
        _cache.clear()
    _cache[key] = value
    return value

def match(pattern, string, flags=0):
    return _cachecompile(pattern, flags).match(string)

def compile(pattern, flags=0):
    "Compile a regular expression pattern, returning a RegexObject."
    groupindex={}
    code=pcre_compile(pattern, flags, groupindex)
    return RegexObject(pattern, flags, code, groupindex)

Es gibt keine besondere Prüfung. Dann Python-2.0.1 sre.py (Auszug)

sre.py


def match(pattern, string, flags=0):
    """Try to apply the pattern at the start of the string, returning
    a match object, or None if no match was found."""
    return _compile(pattern, flags).match(string)

def _compile(*key):
    # internal: compile pattern
    p = _cache.get(key)
    if p is not None:
        return p
    pattern, flags = key
    if type(pattern) not in sre_compile.STRING_TYPES:
        return pattern
    try:
        p = sre_compile.compile(pattern, flags)
    except error, v:
        raise error, v # invalid expression
    if len(_cache) >= _MAXCACHE:
        _cache.clear()
    _cache[key] = p
    return p

Es scheint, dass das Muster so zurückgegeben wird, wie es ist, wenn es keine kompilierbare Zeichenfolge ist. Und Python-2.7.9 re.py (Auszug)

re.py


def match(pattern, string, flags=0):
    """Try to apply the pattern at the start of the string, returning
    a match object, or None if no match was found."""
    return _compile(pattern, flags).match(string)

def _compile(*key):
    # internal: compile pattern
    pattern, flags = key
    bypass_cache = flags & DEBUG
    if not bypass_cache:
        cachekey = (type(key[0]),) + key
        try:
            p, loc = _cache[cachekey]
            if loc is None or loc == _locale.setlocale(_locale.LC_CTYPE):
                return p
        except KeyError:
            pass
    if isinstance(pattern, _pattern_type):
        if flags:
            raise ValueError('Cannot process flags argument with a compiled pattern')
        return pattern
    if not sre_compile.isstring(pattern):
        raise TypeError, "first argument must be string or compiled pattern"
    try:
        p = sre_compile.compile(pattern, flags)
    except error, v:
        raise error, v # invalid expression
    if not bypass_cache:
        if len(_cache) >= _MAXCACHE:
            _cache.clear()
        if p.flags & LOCALE:
            if not _locale:
                return p
            loc = _locale.setlocale(_locale.LC_CTYPE)
        else:
            loc = None
        _cache[cachekey] = p, loc
    return p

Zusätzlich zur Überprüfung, ob das Muster eine Zeichenfolge ist, wird auch überprüft, ob es kompiliert wurde, und es wird eindeutig angegeben, dass "das erste Argument eine Zeichenfolge oder ein kompiliertes Muster sein muss".

Recommended Posts

Über die Angelegenheit, dass das re.compiled-Objekt für das re.match-Muster verwendet werden kann
Funktionen, die in der for-Anweisung verwendet werden können
Über die Sache, dass Fackelzusammenfassung wirklich verwendet werden kann, wenn ein Modell mit Pytorch erstellt wird
[Django] Über Benutzer, die für Vorlagen verwendet werden können
Goroutine (parallele Steuerung), die im Feld eingesetzt werden kann
Goroutine, die im Feld verwendet werden kann (errgroup.Group Edition)
So legen Sie Variablen fest, die in der gesamten Django-App verwendet werden können ~ Praktisch für Vorlagen usw. ~
Ein Timer (Ticker), der im Feld verwendet werden kann (kann überall verwendet werden)
Python-Standardmodul, das in der Befehlszeile verwendet werden kann
Verstehen Sie die Wahrscheinlichkeiten und Statistiken, die für das Fortschrittsmanagement mit einem Python-Programm verwendet werden können
Ich habe eine generische Python-Projektvorlage erstellt
Blenden Sie die Warnung aus, dass zsh auf dem Mac standardmäßig verwendet werden kann
Dateitypen, die mit Go verwendet werden können
Über localhost: Auf 4040 kann nicht zugegriffen werden, nachdem Spark mit Docker ausgeführt wurde
Über die Angelegenheit, die über Stichprobenfehler besorgt war
Das Problem, dass der Befehl ifconfig nicht verwendet werden kann
Übersicht und nützliche Funktionen von Scikit-Learn, die auch für Deep Learning verwendet werden können
Mit Raspberry Pi erstellter Dateifreigabeserver, der für Remote-Arbeiten verwendet werden kann
Grundlegende Algorithmen, die bei Wettkampfprofis eingesetzt werden können
Hinweise zu Python-Kenntnissen, die mit AtCoder verwendet werden können
ANTs Bildregistrierung, die in 5 Minuten verwendet werden kann
4 Boxen, die für Pepper-Hacker nützlich sein könnten
Listen Sie die Klassen auf, auf die ObjCClass verweisen kann
Über das Besuchermuster
[Django] Feldnamen, die für das Benutzermodell, die Benutzerregistrierung und die Anmeldemethoden verwendet werden können
[Atcoder] [C ++] Ich habe ein Testautomatisierungstool erstellt, das während des Wettbewerbs verwendet werden kann
Verschiedene Hinweise zur Verwendung von Python für Projekte
Skripte, die bei der Verwendung von Bottle in Python verwendet werden können
Ich habe die Vorbehandlung untersucht, die mit PyCaret durchgeführt werden kann
[Flask] Ich habe versucht, die "Docker-Compose-Konfiguration" zusammenzufassen, die schnell für Webanwendungen erstellt werden kann
Ich habe versucht, es zu erweitern, damit die Datenbank mit der Analysesoftware von Wiire verwendet werden kann
Welches Oktalliteral verwendet werden kann, hängt von der Programmiersprache ab
Umgang mit Zeichenketten in der JSON-Kommunikation
Zusammenfassung der Standardeingabe von Python, die in Competition Pro verwendet werden kann
Können Kalman-Filter verwendet werden, um Aktienentwicklungen vorherzusagen?
Ich habe einen Tri-Tree geschrieben, der für die Implementierung von Hochgeschwindigkeitswörterbüchern in D-Sprache und Python verwendet werden kann
Lösung für das Problem, dass Strg + z in Powershell in Docker für Windows nicht verwendet werden kann (vorläufig)
Ein Memo beim Erstellen einer Umgebung, die vorerst mit Lambda @ Edge debuggt werden kann
Ein Muss für neue Ingenieure! Die technischen Merkmale Ihres Unternehmens, die durch Web-Training verstanden werden können!