Appending '0x' before the hex numbers in a string
parsing, python
Solution
Use the `re` module.
>>> import re
>>> re.sub(r'([\dA-F]+)', r'0x\1', 'id*A+2')
'id*0xA+0x2'
>>> eval(re.sub(r'([\dA-F]+)', r'0x\1', 'CAFE+BABE'))
99772
Be warned though, with an invalid input to `eval`, it won't work. There are also many risks of using `eval`.
If your hex numbers have lowercase letters, then you could use this:
>>> re.sub(r'(?<!i)([\da-fA-F]+)', r'0x\1', 'id*a+b')
'id*0xa+0xb'
This uses a negative lookbehind assertion to assure that the letter `i` is not before the section it is trying to convert (preventing `'id'` from turning into `'i0xd'`. Replace `i` with `I` if the variable is `Id`.
Problem
I'm parsing a xml file in which I get basic expressions (like `id*10+2`). What I am trying to do is to evaluate the expression to actually get the value. To do so, I use the `eval()` method which works very well. The only thing is the numbers are in fact hexadecimal numbers. The `eval()` method could work well if every hex number was prefixed with '0x', but I could not find a way to do it, neither could I find a similar question here. How would it be done in a clean way ?