From: fuglyducky on
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
From: fuglyducky on
On Aug 12, 2:06 pm, fuglyducky <fuglydu...(a)gmail.com> wrote:
> 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.
From: John Machin on
On Aug 13, 7:33 am, fuglyducky <fuglydu...(a)gmail.com> wrote:
> On Aug 12, 2:06 pm, fuglyducky <fuglydu...(a)gmail.com> wrote:
>
>
>
> > 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.

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.

>>> s1 = "foobarzot"
>>> s2 = s1.replace("bar", "-")
>>> s2
'foo-zot'
>>>
From: Steven D'Aprano on
On Thu, 12 Aug 2010 14:33:28 -0700, fuglyducky wrote:

> 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.


--
Steven
From: MRAB on
Steven D'Aprano wrote:
> On Thu, 12 Aug 2010 14:33:28 -0700, fuglyducky wrote:
>
>> 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! :-)