Можно использовать std::regex
.
В зависимости от размера вашего файла и доступной вам памяти, можно прочитать его либо по строкам, либо целиком в файле std::string
.
Чтобы прочитать файл , вы можете использовать:
std::ifstream t("file.txt");
std::string sin((std::istreambuf_iterator(t)),
std::istreambuf_iterator());
, после чего вы можете сопоставить это, которое на самом деле настраивается для ваших нужд.
std::regex word_regex(",\\s]+");
auto what =
std::sregex_iterator(sin.begin(), sin.end(), word_regex);
auto wend = std::sregex_iterator();
std::vector v;
for (;what!=wend ; wend) {
std::smatch match = *what;
v.push_back(match.str());
}
Вы можете проверить путь в process_request (и любых других методах process _ * - в вашем промежуточном программном обеспечении)
def process_request(self, request):
if request.path.startswith('/admin/'):
return None
# rest of method
def process_response(self, request, response):
if request.path.startswith('/admin/'):
return response
# rest of method
Основная причина, по которой я хотел это сделать, заключалась в использовании XML-анализатора в промежуточном программном обеспечении, которое мешало загрузкам, отличным от XML. Я добавил некоторый дополнительный код для определения того, является ли код XML, и не пытается анализировать то, чего он не должен.
Для другого промежуточного программного обеспечения, где это было бы неудобно, я, вероятно, буду использовать описанный выше метод piquadrat, или, может быть, просто использовать декоратор вида - Cheers piquadrat!
Общий способ будет (на основе ответа piquadrat)
def process_request(self, request):
if request.path.startswith(reverse('admin:index')):
return None
# rest of method
Таким образом, если кто-то изменит / admin /
на / django_admin /
вы все еще прикрыты.