Как извлечь шестнадцатеричное значение из строки python? - PullRequest
1 голос
/ 21 февраля 2020

ниже - строка. Register addr = [0x0128], data = [0x59]

Я хочу получить 0x59, а не 0x0128, используя Regex

это мой код

import re
data = "Register addr = [0x0128], data = [0x59]"
pattern = re.compile("d[.]]")
re.findall(pattern, data)

У меня нет идеи, чтобы получить точный 0x59, не могли бы вы мне помочь?

Ответы [ 3 ]

3 голосов
/ 21 февраля 2020

Вы можете сделать

data = "Register addr = [0x0128], data = [0x59]"
print(re.findall(r'(?<=data\s=\s)\[(\w*)\]',data))

Вывод

['0x59']

Вы также можете сделать print(re.search(r'(?<=data\s=\s)\[(\w*)\]',data).group(1))

вывод

Обратите внимание, что re.search возвращает ТОЛЬКО первое совпадение (прекращает поиск после первого совпадения.

0x59
1 голос
/ 21 февраля 2020

Простой способ сделать это:

print(re.sub(']', '', data.partition("data = [")[2]))

.partition разбивает строку на data = [, давая кортеж & [2] выбирает часть строки после data = [.

re.sub удаляет все ] из этой строки.

Обратите внимание, что 0x59 и 0x0128 являются действительными шестнадцатеричными числами.

1 голос
/ 21 февраля 2020

Если вы только пытаетесь найти 0x59, просто выполните его прямой поиск.

pattern = re.compile(r"0x59")

Если вы хотите найти все hex коды, начинающиеся с 0x, расположенные в []

pattern = re.compile(r"\[0x.*?\]")
re.findall(pattern, data)
#['[0x0128]', '[0x59]']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...