Я хотел бы, чтобы регулярное выражение нашло %
s в исходной строке, которые не образуют начало действительного двух-шестнадцатеричного экранированного символа (определяется как %
за которыми следуют ровно две шестнадцатеричные цифры (верхний или нижний регистр), которые можно использовать для замены только этих символов %
на %25
.
(Мотивация состоит в том, чтобы сделать лучшую догадку попытку создать юридически экранированные строки из строк различного происхождения, которые могут быть юридически экранированы в процентах, а могут и не быть, и даже могут быть смесью двух, без повреждение намерения данных, если исходная строка уже была правильно закодирована, например, путем повторного кодирования в целом).
Вот пример входной строки.
He% 20has% 20a% 2050 %% 20chance% 20of% 20living% 2C% 20but% 20there% 27s% 20only% 20a% 2025 %% 20chance% 20of% 20that.
Это не соответствует какому-либо стандарту кодирования, поскольку представляет собой сочетание допустимых экранированных символов, например. %20
и два свободных процента. Я хотел бы преобразовать эти %
s в %25
s.
Мой прогресс до сих пор заключается в том, чтобы определить регулярное выражение %[0-9a-z]{2}
, которое находит символы%, которые являются допустимыми, но я не могу понять, как изменить его, чтобы найти те, которые aren ' т законно.