2015-10-09 3 views
2

я это 'если' состояние внутри моего сценария:Почему моя команда re.search не работает?

if (re.search(argVariable, newArgs)): 

Однако это не удается, когда я проходил мимо на определенное значение для выхода

Sample 'argVariable':

Searching for the argument: -XX:+HeapDumpOnOutOfMemoryError 
argVariable: "-XX:+HeapDumpOnOutOfMemoryError" 
"-XX:+HeapDumpOnOutOfMemoryError" is MISSING, Adding... 

Я что моя переменная newArgs уже имеет это. (См. Ниже)

New args: -Xverbosetimestamp -Xverbose:memory -XX:+CrashOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError 

Что я делаю неправильно?

ответ

1

Я понял, что мне нужно re.escape фактическое значение прямо перед тем, как я его использую. Тогда мне нужно использовать скомпилированную версию, чтобы избежать специальных символов в переменной должно интерпретироваться как регулярное выражение»специальный символ:

compiledArgVariable = re.compile(re.escape(argVariable)) 
if (re.search(compiledArgVariable, newArgs)): 

Пример выходных данных показывает, что он находит точное значение:

argVariable: "-XX:+HeapDumpOnOutOfMemoryError" 
"-XX:+HeapDumpOnOutOfMemoryError" found to be an EXISTING argument. Checking if it has the correct value... 
"-XX:+HeapDumpOnOutOfMemoryError" HAS the correct value. Skipping.. 
0

вы необходимо избегать вашего регулярного выражения, используйте re.escape():

escapedRegex = re.escape(regex) 
Смежные вопросы