2016-10-28 3 views
0

Python любитель здесь:Использования переменных в регулярных выражениях

Я просто играл с регулярными выражениями, и я пришел через это:

import re 

while True: 
    userInput = input('Type in your string here: ') 
    regexInput = input('Enter Regex pattern here:') 

    testRegex = re.compile([^regexInput]) 
    testMO = testRegex.search(userInput) 
    print(testMO.group()) 

В принципе, я хочу, чтобы мое регулярное выражение, чтобы соответствовать все кроме шаблона, который я указал через regexInput. Тем не менее, я получаю синтаксические ошибки из этого кода. Я думал, что положить морковь сразу после открытия скобки класса символов, это означает, что Python будет искать все, кроме того, что находится в скобке? Я делаю последний проект главы 7 в разделе «Автоматизация скучных вещей». Как я могу заставить свой код соответствовать всем, кроме того, что напечатано в regexInput?

Кто это сказал мне:

регулярное выражение ожидает строку, так что вы должны создать строку:

"[^" + regexInput +"]" or "[^{}]".format(regexInput)

Я не в полной мере понять этот ответ, особенно вторую часть ответа. Просто чтобы проверить, что он сказал, я использовал этот код:

import re 

while True: 
    userInput = input('Type in your string here: ') 
    regexInput = input('Enter Regex pattern here:') 

    testRegex = re.compile(regexInput) 
    testMO = testRegex.search(userInput).group() 
    print(testMO) 

Который дал мне выход:

Type in your string here: Here lies Batman. 
Enter Regex pattern here:Batman 
Batman 
Type in your string here: 

Означает ли это, что регулярное выражение также принял переменную, и сделал это Работа? Поэтому я немного смущен тем, что сказал этот другой человек, поскольку это противоречит его утверждению «regex ожидает строка».

+0

Короткий ответ: 'input' возвращает строку. Строки отличаются от буквенного кода, что и вызывало синтаксическую ошибку. – BallpointBen

+2

Это не противоречит заявлению. 'input()' возвращает строку. Ваши два примера кода не эквивалентны. Существует несколько способов создания строки в Python, вставляя литеральный текст * внутри кавычек *, один, чтение из входного потока (с использованием 'input()') - другое. – cdarke

+0

Что вы ожидаете от вывода в вашем примере? – augurar

ответ

0

[^regexInput] не является синтаксически допустимым выражением Python. Похоже, вы пытаетесь создать строку, состоящую из символов [^, за которой следует значение переменной regexInput, а затем символ ]. Один из способов написать это в Python: '[^' + regexInput + ']'.

Смежные вопросы