When I run the below code the output is:
[HCO3-], [Ca+], [potassium ion concentration+], [Cl-]. HCO3-, Ca+, potassium ion concentration+, Cl-.
But it should be:
Bicarbonate ion concentration, Calcium ion concentration, potassium ion concentration, chloride ion concentration. Bicarbonate ions, Calcium ions, potassium ions, chloride ions.
Why is the function converting parts of the string but not the whole thing?
Code:
### imports
import re
### definitions
def concentration_expansion(text):
'''expand concentration names'''
swaps = {
'[Cl-]': 'chloride ion concentration', '[K+]': 'potassium ion concentration',
'[Ca+]': 'Calcium ion concentration', '[HCO3-]': 'Bicarbonate ion concentration',
}
initial = text
for key in swaps:
pattern = r'\b' + '{}'.format(key) + r'\b'
text = re.sub(pattern, swaps.get(key), text, flags=re.IGNORECASE)
return text
def ion_abbrev(text):
'''expand ion names'''
swaps = {
'Cl-': 'chloride ions', 'K+': 'potassium ions',
'Ca+': 'Calcium ions', 'HCO3-': 'Bicarbonate ions',
}
initial = text
for key in swaps:
pattern = r'\b' + '{}'.format(key) + r'\b'
text = re.sub(pattern, swaps.get(key), text, flags=re.IGNORECASE)
return text
### program
text = '''
[HCO3-], [Ca+], [K+], [Cl-]. HCO3-, Ca+, K+, Cl-.
'''
text = concentration_expansion(text)
print(text)