re.sub and variables

F

fuglyducky

I have a function that I am attempting to call from another file. I am
attempting to replace a string using re.sub with another string. The
problem is that the second string is a variable. When I get the
output, it shows the variable name rather than the value. Is there any
way to pass a variable into a regex?

If not, is there any other way to do this? I need to be able to dump
the variable value into the replacement string.

For what it's worth this is an XML file so I'm not afraid to use some
sort of XML library but they look fairly complicated for a newbie like
me.

Also, this is py3.1.2 is that makes any difference.

Thanks!!!

#####################################################

import random
import re
import datetime

def pop_time(some_string, start_time):
global that_string

rand_time = random.randint(0, 30)
delta_time = datetime.timedelta(seconds=rand_time)

for line in some_string:
end_time = delta_time + start_time
new_string = re.sub("thisstring", "thisstring\\end_time",
some_string)
start_time = end_time

return new_string
 
F

fuglyducky

I have a function that I am attempting to call from another file. I am
attempting to replace a string using re.sub with another string. The
problem is that the second string is a variable. When I get the
output, it shows the variable name rather than the value. Is there any
way to pass a variable into a regex?

If not, is there any other way to do this? I need to be able to dump
the variable value into the replacement string.

For what it's worth this is an XML file so I'm not afraid to use some
sort of XML library but they look fairly complicated for a newbie like
me.

Also, this is py3.1.2 is that makes any difference.

Thanks!!!

#####################################################

import random
import re
import datetime

def pop_time(some_string, start_time):
    global that_string

    rand_time = random.randint(0, 30)
    delta_time = datetime.timedelta(seconds=rand_time)

    for line in some_string:
        end_time = delta_time + start_time
        new_string = re.sub("thisstring", "thisstring\\end_time",
some_string)
        start_time = end_time

    return new_string

Disregard...I finally figured out how to use string.replace. That
appears to work perfectly. Still...if anyone happens to know about
passing a variable into a regex that would be great.
 
J

John Machin

Disregard...I finally figured out how to use string.replace. That
appears to work perfectly. Still...if anyone happens to know about
passing a variable into a regex that would be great.

Instead of

new_string = re.sub(
"thisstring", "thisstring\\end_time", some_string)

you probably meant to use something like

new_string = re.sub(
"thisstring", "thisstring" + "\\" + end_time, some_string)

string.replace is antique and deprecated. You should be using methods
of str objects, not functions in the string module.
 
S

Steven D'Aprano

if anyone happens to know about
passing a variable into a regex that would be great.

The same way you pass anything into any string.

Regexes are ordinary strings. If you want to construct a string from a
variable t = "orl", you can do any of these:

"Hello w" + t + "d"

"".join(["Hello", " ", "w", t, "d"])

"Hello w%sd" % t

"Hello %s" % ("w" + t + "d")

"Hello w%(var)sd" % {"var": t}

"Hello wSPAMd".replace("SPAM", t)

or many other variations. Constructing a regex is no different.
 
M

MRAB

Steven said:
if anyone happens to know about
passing a variable into a regex that would be great.

The same way you pass anything into any string.

Regexes are ordinary strings. If you want to construct a string from a
variable t = "orl", you can do any of these:

"Hello w" + t + "d"

"".join(["Hello", " ", "w", t, "d"])

"Hello w%sd" % t

"Hello %s" % ("w" + t + "d")

"Hello w%(var)sd" % {"var": t}

"Hello wSPAMd".replace("SPAM", t)

or many other variations. Constructing a regex is no different.
You just need to remember that if you pass a string into re.sub as a
replacement then it'll be treated as a template. It's all in the
documentation! :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top