Python regex для хеша MD5

Создайте это встроенное удовольствие:

inline fun <reified T> Gson.fromJson(json: String) = this.fromJson<T>(json, object: TypeToken<T>() {}.type)

, а затем вы можете вызвать его следующим образом:

val turns = Gson().fromJson<Turns>(pref.turns)
// or
val turns: Turns = Gson().fromJson(pref.turns)

ПРИМЕЧАНИЕ. Этот подход не был возможен раньше в старом плагине kotlin версии, но теперь вы можете использовать его.


Предыдущие альтернативы:

АЛЬТЕРНАТИВА 1:

val turnsType = object : TypeToken<List<Turns>>() {}.type
val turns = Gson().fromJson<List<Turns>>(pref.turns, turnsType)

Вы должны положить object : и конкретный тип в fromJson<List<Turns>>

<ч>

Альтернативный вариант 2:

Как @cypressious упомянуть, что может быть достигнуто также таким образом:

inline fun <reified T> genericType() = object: TypeToken<T>() {}.type

использовать как:

val turnsType = genericType<List<Turns>>()
19
задан Ashy 16 December 2008 в 23:45
поделиться

4 ответа

Ну, так как md5 является просто строкой 32 шестнадцатеричных цифр обо всем, что Вы могли добавить к своему выражению, проверка на "32 цифры", возможно, что-то вроде этого?

re.findall(r"([a-fA-F\d]{32})", data)
52
ответ дан 30 November 2019 в 01:54
поделиться

При использовании регулярных выражений в Python необходимо почти всегда использовать необработанный строковый синтаксис r"...":

re.findall(r"([a-fA-F\d]{32})", data)

Это гарантирует, что обратная косая черта в строке не интерпретируется нормальным выходом Python, но вместо этого передается до эти re.findall функция, таким образом, это видит \d дословно. В этом случае Вы удачливы, что \d не интерпретируется выходом Python, но чем-то как \b (который имеет совершенно другие значения в выходе Python, и в регулярных выражениях) был бы.

Посмотрите re документация модуля для получения дополнительной информации.

12
ответ дан 30 November 2019 в 01:54
поделиться

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

re.findall(r'(?i)(?<![a-z0-9])[a-f0-9]{32}(?![a-z0-9])', data)

Это гарантирует, чтобы соответствие было строкой 32 шестнадцатеричных символов цифры, , но который не содержится в большей строке других алфавитно-цифровых символов. Со всеми другими решениями, если бы существует строка 37 непрерывных hexadecimals, шаблон соответствовал бы первым 32 и назвал бы ее соответствием, или если бы существует строка 64 hexadecimals, она разделила бы его в половине и соответствовала бы каждой половине как независимому соответствию. Исключая их выполняется через предвидение и lookbehind утверждения, которые не получают и не будут влиять на содержание соответствия.

Примечание также (? i) флаг, который будет, делает шаблон нечувствительным к регистру, который сохраняет определенный ввод, и что обертывание всего шаблона в круглых скобках является лишним.

8
ответ дан 30 November 2019 в 01:54
поделиться

Как насчет" ([a-fA-F\d] {32})", который требует, чтобы это было 32 символами долго?

2
ответ дан 30 November 2019 в 01:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: