374 Stimmen

Wie verwendet man eine Variable innerhalb eines regulären Ausdrucks?

Ich würde gerne eine variable innerhalb einer regex wie kann ich das in Python ?

TEXTO = sys.argv[1]

if re.search(r"\b(?=\w)TEXTO\b(?!\w)", subject, re.IGNORECASE):
    # Successful match
else:
    # Match attempt failed

6voto

Max Carroll Punkte 3659

Ich stimme mit allen oben genannten Punkten überein:

sys.argv[1] war etwa so Chicken\d{2}-\d{2}An\s*important\s*anchor

sys.argv[1] = "Chicken\d{2}-\d{2}An\s*important\s*anchor"

würden Sie nicht verwenden wollen re.escape , denn in diesem Fall möchten Sie, dass es sich wie ein Regex verhält

TEXTO = sys.argv[1]

if re.search(r"\b(?<=\w)" + TEXTO + "\b(?!\w)", subject, re.IGNORECASE):
    # Successful match
else:
    # Match attempt failed

4voto

Kevin Chou Punkte 371

Können Sie eine andere Verwendung versuchen, indem Sie format grammer suger:

re_genre = r'{}'.format(your_variable)
regex_pattern = re.compile(re_genre)

2voto

jdelaporte Punkte 127

Ich musste nach Benutzernamen suchen, die einander ähnlich sind, und was Ned Batchelder sagte, war unglaublich hilfreich. Ich stellte jedoch fest, dass ich eine sauberere Ausgabe hatte, wenn ich re.compile zum Erstellen meines neuen Suchbegriffs verwendete:

pattern = re.compile(r"("+username+".*):(.*?):(.*?):(.*?):(.*)"
matches = re.findall(pattern, lines)

Die Ausgabe kann wie folgt gedruckt werden:

print(matches[1]) # prints one whole matching line (in this case, the first line)
print(matches[1][3]) # prints the fourth character group (established with the parentheses in the regex statement) of the first line.

1voto

Ardhi Punkte 2529

Hier ist ein anderes Format, das Sie verwenden können (getestet mit Python 3.7)

regex_str = r'\b(?<=\w)%s\b(?!\w)'%TEXTO

Ich finde es nützlich, wenn man nicht mit {} für Variable (hier ersetzt durch %s )

1voto

from re import search, IGNORECASE

def is_string_match(word1, word2):
    #  Case insensitively function that checks if two words are the same
    # word1: string
    # word2: string | list

    # if the word1 is in a list of words
    if isinstance(word2, list):
        for word in word2:
            if search(rf'\b{word1}\b', word, IGNORECASE):
                return True
        return False

    # if the word1 is same as word2
    if search(rf'\b{word1}\b', word2, IGNORECASE):
        return True
    return False

is_match_word = is_string_match("Hello", "hELLO") 
True

is_match_word = is_string_match("Hello", ["Bye", "hELLO", "@vagavela"])
True

is_match_word = is_string_match("Hello", "Bye")
False

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X