Base64 регулярное выражение, которое фильтрует нежелательные результаты - PullRequest
1 голос
/ 02 мая 2019

Отфильтровывать нежелательные совпадения из регулярного выражения

Я извлекаю строки кодирования base64 в R и использую следующее регулярное выражение:

\b[A-Za-z0-9+/]\b

99% времени работает нормально, но когда у меня есть такие случаи (или подобные):

itisyourpersonalenergyspecialistitisyourpersonalenergyspecialist

, где у меня слова сложены, я получаю совпадения. Мои данные беспорядочные и вот так.

Есть ли способ отфильтровать их, изменив мое оригинальное регулярное выражение.

Вопрос может быть очевиден, но я относительно новичок в регулярных выражениях.

1 Ответ

0 голосов
/ 02 мая 2019

Вы можете подумать о создании нескольких границ в выражении для этой вероятности 1%, которая может у вас возникнуть и произойти.

Этот RegEx может помочь вам спроектировать такоевыражение, просто используя добавление некоторых границ, таких как:

  • Должны иметь определенные символы, используя (?=), за которым следует число вхождений {n,} (даже если это не лучшая граница, это можетпомочь вам спроектировать один, я не совсем уверен насчет base64)

  • Вы также можете добавить границу длины вокруг \b( )\b, чтобы она не совпадала с пробной строкой, которую вы можете иметь снизкая процентная вероятность.

Вы можете видеть, что вероятность такой строки как:

 itisyourpersonalenergyspecialistitisyourpersonalenergyspecialist

быть строкой base64 в значительной степени 0.Даже если у вас есть несколько случайных строк, немного близких к формату base64, может быть, что-то похожее на то, что я выделил, хорошее выражение может просто исключить это.

Вы можете добавить так много типов границ, чтобы достичь почти100% точность, если хотите.Это не очень хорошее выражение, но оно может дать вам общее представление:

(?=.+[A-Z]{2,})(?=.+[a-z]{2,})(?=.+[0-9]{2,})([A-Za-z0-9+\/]{100,}) 

Это выражение может означать, что строковый ввод:

  • должен иметь минимумдва символа [AZ] рядом друг с другом.
  • должен содержать не менее двух символов [az] рядом друг с другом.
  • должен содержать минимум два символа [0-9] рядомдруг другу (в этом я так уверен).
  • должно иметь длину не менее 100 base64 char.

enter image description here

Вы можете подумать, что добавленные мной квантификаторы, такие как {2,} и {100,}, просто показывают, чтоВы можете исключить строку в качестве примера в своем вопросе.Скорее всего, вы можете создать множество гораздо лучших выражений для этого соответствия, которые вы хотите передать 100% точности.


Дополнительная демонстрация:

Этот RegEx может помочь вам увидеть, как работает квантификатор:

 ([A-Za-z0-9+\/]{100,})

enter image description here

В целом, вы, безусловно, можете это сделать.

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