регулярное выражение: сопоставить любую непонятную строку внутри URL - PullRequest
0 голосов
/ 31 января 2019

Я ищу любые вещи в 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]

Это почти делает работу , но на самом деле это не элегантно, и я боюсь, что оно может быть ненадежным и может потребовать много времени для сопоставления с большим набором данных.У вас есть лучшие идеи для достижения этой цели?Спасибо;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...