fairman
fairman

Reputation: 45

How to replace some numbers with other in from one line?

I have line include some numbers with underscore like this

1_0_1_A2C_1A_2BE_DCAAFFC_0_0_0

I need code to check (DCAAFFC) and if the last 4 numbers not (0000) then the code should be replacing (0000) in place of last 4 numbers (AFFC) like this (DCA0000) So should be line become like this

1_0_1_A2C_1A_2BE_DCA0000_0_0_0

I need code work on python2 and 3 please !!

P.S the code of (DCAAFFC) is not stander always changing.

Upvotes: 1

Views: 259

Answers (4)

dtlam26
dtlam26

Reputation: 1600

code=1_0_1_A2C_1A_2BE_DCAAFFC_0_0_0 I will assume that the format is strictly like this. Then you can get the DCAAFFC by code.split('_')[-4]. Finally, you can replace the last string with 0000 by replace.

Here is the full code

>>> code="1_0_1_A2C_1A_2BE_DCAAFFC_0_0_0"
>>> frag=code.split("_")
['1', '0', '1', 'A2C', '1A', '2BE', 'DCAAFFC', '0', '0', '0']
>>> frag[-4]=frag[-4].replace(frag[-4][-4:],"0000") if frag[-4][-4:] != "0000" else frag[-4]
>>> final_code="_".join(frag)
>>> final_code
'1_0_1_A2C_1A_2BE_DCA0000_0_0_0'

Upvotes: 2

Harshit Gupta
Harshit Gupta

Reputation: 380

Is this a general string or just some hexadecimal representation of a number? For numbers in Python 3, '_' underscores are used just for adding readability and do not affect the number value in any way.

Say you have one such general string as you've given, and would like to replace ending 4 characters of every possible subgroup bounded within '_' underscores having length more than 4 by '0000', then one simple one-liner following your hexadecimal_string would be:

hexadecimal_string = "1_0_1_A2C_1A_2BE_DCAAFFC_0_0_0"
hexadecimal_string = "_".join([ substring if len(substring)<=4 else substring[:-4]+'0'*4 for substring in hexadecimal_string.split('_')])

Here,

  • hexadecimal_string.split('_') separates all groups by '_' as separator,
  • substring if len(substring)<=4 else substring[:-4]+'0'*4 takes care of every such substring group having length more than 4 to have ending 4 characters replaced by '0'*4 or '0000',
  • such for loop usage is a list comprehension feature of Python.
  • '_'.join() joins the subgroups back into one main string using '_' as separator in string.

Other answers posted here work specifically well for the given string in the question, I'm sharing this answer to ensure your one-liner requirement in Python 3.

Upvotes: 2

K4liber
K4liber

Reputation: 913

Try regular expressions i.e:

import re

old_string = '1_0_1_A2C_1A_2BE_DCAAFFC_0_0_0'
match = re.search('_([a-zA-Z]{7})_', old_string)
span = match.span()
new_string = old_string[:span[0]+4] + '0000_' + old_string[span[1]:]
print(new_string)

Upvotes: 2

anarchy
anarchy

Reputation: 5184

If the length of the string is always the same, and the position of the part that needs to be replaced with zero is always the same, you can just do this,

txt = '1_0_1_A2C_1A_2BE_DCAAFFC_0_0_0'
new = txt[0:20]+'0000'+txt[-6:]

print(new)

The output will be

'1_0_1_A2C_1A_2BE_DCA0000_0_0_0'

It would help if you gave us some other examples of the strings.

Upvotes: 1

Related Questions