Reputation: 65
I have functions
def getName():
name = "Mark"
return name
def getDay():
day = "Tuesday"
return day
I have a variable
message = "Hi there [getName] today is [getDay]"
I need to check all occurences for the strings between the square brackets in my message
variable and check whether that name is a function that exists so that I can evaluate the value returned by the function and finally come up with a new message string as follows
message = "Hi there Mark, today is Tuesday
Upvotes: 0
Views: 603
Reputation: 27196
f-strings are the way to go on this but that wasn't the question. You could do it like this but I wouldn't advise it:
import re
def getName():
return 'Mark'
def getDay():
return 'Tuesday'
msg = "Hi there [getName] today is [getDay]"
for word in re.findall(r'\[.*?\]', msg):
try:
msg = msg.replace(word, globals()[word[1:-1]]())
except (KeyError, TypeError):
pass
print(msg)
Output:
Hi there Mark today is Tuesday
Upvotes: 1
Reputation: 780
import re
message = "Hi there [getName] today is [getDay]"
b = re.findall(r'\[.*?\]',message)
s=[]
for i in b:
s.append(i.strip('[]'))
print(s)
Output:
['getName', 'getDay']
Upvotes: 0
Reputation: 1047
There is another way of achieving this if you specifically want to use the string in that format. However, fstrings as shown in the above answer are a much superior alternative.
def f(message):
returned_value=''
m_copy=message
while True:
if '[' in m_copy:
returned_value+=m_copy[:m_copy.index('[')]
returned_value+=globals()[m_copy[m_copy.index('[')+1:m_copy.index(']')]]()
m_copy=m_copy[m_copy.index(']')+1:]
else:
return returned_value+m_copy
Upvotes: 1