Я ищу любые вещи в URL, которые были бы непонятными последовательностями символов и / или цифр ( хэши, закодированные вещи, GUID / UUID ... ).Я предполагаю, что все символы имеют тип [a-zA-Z0-9_-]
.Все положительные совпадения я заменю конкретной строкой "___ptag___"
.Некоторые примеры, которые я нашел в своем наборе данных:
#Positive Matches :
p=["i-IJ0BWanbqz9CojDxJSC3",
"613_18571416_658343_0_12624",
"75ZTZFtTQ15",
"dGhvbWFzLmNvcXVlcnklNDBmcmVlLmZydGh",
"3fd736170ad91c7b59e699fbe7c98e27",
"click8456312324877856p", # even if there is an intelligible word inside, it's a match
"bfjkzahzrfhquchrjghlyuui"]
# negative matches:
n=["sunny_health_fitness_twister_stepper" # words,
"Itunesdotypointappledotypointcom", # words
"2019_01_29", # it looks like a date
"Office-365", # it is intelligible (letters followed by small number of digits)
"id217", # too small, represents something
"No_Ad_t0", # too small
"8461531", # to small
"veri876xx_omg"] # represents something
Я думал об использовании этого шаблона, состоящего из 4 OR
групп, для моделирования моих правил:
все, что содержит большечем 8 последовательных цифр, или
что-либо длиннее 9 символов, с 2+ альтернативами цифр / символов, или
- что-либо длиннее 9 символов, с2+ альтернатива верхнего / нижнего регистра, или
- что-нибудь длиннее 9, с 6+ последовательными согласными.
import re
[re.findall(r".*\d{9,}.*|(?=.*(?:[0-9]+[A-Za-z]+){2,}).{9,}|(?=.*(?:[a-z]+[A-Z]+){2,}).{9,}|.*(?=[zrtpqsdfghjklmwxcvbnZRTPQDFGHJKLMWXCVBN]{6,}).*.{9,}", i) for i in p+n]
Это почти делает работу , но на самом деле это не элегантно, и я боюсь, что оно может быть ненадежным и может потребовать много времени для сопоставления с большим набором данных.У вас есть лучшие идеи для достижения этой цели?Спасибо;