Python PDF-Redactor только частично маскирует содержимое - PullRequest
1 голос
/ 16 апреля 2020

Я использую python редактор PDF, и он отлично работает: https://github.com/JoshData/pdf-redactor

Синтаксис для маскирования содержимого, как указано в github, выглядит следующим образом, где регулярное выражение это шаблон для поиска, а X в лямбда-выражении - это строка для замены найденных шаблонов на:

options.content_filters = [
    (
        re.compile(r"5555-(\d{3})-(\d{3})-(\d{6})"),
        lambda m : "XXXX-XXX-XXX-XXXXXX"
    )
]

Но что если я захочу найти выражение, соответствующее этому, и замаскировать только все, кроме последнего четыре символа, что-то вроде этого:

options.content_filters = [
    (
        re.compile(r"5555-(\d{3})-(\d{3})-(\d{6})"),
        lambda m : "XXXX-XXX-XXX-XXRRRR"
    )
]

Где 'R' будет означать сохранить первоначальный символ. В github я не могу найти никакой документации о том, как это сделать, или использовать некоторые встроенные функции regex / lamda.

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете перегруппировать шаблоны, чтобы получить то, что вам нужно сохранить, и использовать объект данных совпадений, m:

options.content_filters = [
    (
        re.compile(r"5555-\d{3}-\d{3}-\d{2}(\d{4})"),
        lambda m : "XXXX-XXX-XXX-XX" + m.group(1)
    )
]

Здесь 5555-\d{3}-\d{3}-\d{2} совпадений 5555-, три цифры, -, три цифры, -, две цифры и (\d{4}) фиксируют четыре цифры в группе 1. Вы можете получить доступ к этому значению, используя m.group(1).

Если вы планируете сопоставить эти значения коды как целые слова. Попробуйте использовать

  • r"\b5555-\d{3}-\d{3}-\d{2}(\d{4})\b"
  • r"(?<!\d)5555-\d{3}-\d{3}-\d{2}(\d{4})(?!\d)"
  • r"(?<!\d)(?<!\d-)5555-\d{3}-\d{3}-\d{2}(\d{4})(?!-?\d)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...