Я должен искать шаблон либо внутри содержимого переменной, либо внутри файла данных. Ниже приведен код, который у меня есть:
import re
UserSpecifiedPattern = "segfault"
# find every instance of a user specified pattern
pattern = re.compile( rb'(\.\W+)?([^.]?segfault[^.]*?\.)',
re.DOTALL | re.IGNORECASE | re.MULTILINE )
Моя проблема заключается в том, как указать переменную "re.compile". Значит, я сохраняю фактический шаблон для поиска в переменной. И я даю эту переменную re.compile. Ниже я полагаю, что это должно работать, но это не так:
import re
UserSpecifiedPattern = "segfault"
# find every instance of a user specified pattern
pattern = re.compile( rb'(\.\W+)?([^.]?UserSpecifiedPattern[^.]*?\.)',
re.DOTALL | re.IGNORECASE | re.MULTILINE )
Я предполагаю, что это должно быть так?
import re
UserSpecifiedPattern = "segfault"
# find every instance of a user specified pattern
pattern = re.compile( rb'(\.\W+)?([^.]?{UserSpecifiedPattern}[^.]*?\.)',
re.DOTALL | re.IGNORECASE | re.MULTILINE )
поиск регулярного выражения с использованием ввода bytes
, но, конечно, ваше имя переменной обрабатывается буквально.
Вы должны ввести свою переменную, например, используя format
строки, а затем закодировать до байтов (у bytes
объекта нет format
поэтому он кодирует его впоследствии (здесь вы не можете использовать префикс b
):
pattern = re.compile(r'(\.\W+)?([^.]?{}[^.]*?\.)'.format(UserSpecifiedPattern).encode(),
re.DOTALL | re.IGNORECASE | re.MULTILINE )
заметки:
{}
для повторения выражений. Если вам нужно использовать это, удвойте фигурные скобки: ex: {{1,5}}
re.escape
на нем, если вы хотите, чтобы регулярное выражение увидело его буквально (это не имеет большого значения со словами)