Checking if string inside quotes?

half.italian at gmail.com half.italian at gmail.com
Wed May 9 21:48:02 EDT 2007


On May 9, 2:31 pm, "Michael Yanowitz" <m.yanow... at kearfott.com> wrote:
> Thanks, but it is a little more complicated than that,
>   the string could be deep in quotes.
>
>    The problem is in string substitution.
> Suppose I have a dictionary with MY_IP : "172.18.51.33"
>
>   I need to replace all instances of MY_IP with "172.18.51.33"
> in the file.
>   It is easy in cases such as:
>   if (MY_IP == "127.0.0.1"):
>
>   But suppose I encounter:"
>  ("(size==23) and (MY_IP==127.0.0.1)")
>
>    In this case I do not want:
>  ("(size==23) and ("172.18.51.33"==127.0.0.1)")
>     but:
>  ("(size==23) and (172.18.51.33==127.0.0.1)")
>     without the internal quotes.
>  How can I do this?
>   I presumed that I would have to check to see if the string
> was already in quotes and if so remove the quotes. But not
> sure how to do that?
>   Or is there an easier way?
>
> Thanks in advance:
> Michael Yanowitz
>
> -----Original Message-----
> From: python-list-bounces+m.yanowitz=kearfott.... at python.org
>
> [mailto:python-list-bounces+m.yanowitz=kearfott.... at python.org]On Behalf
> Of half.ital... at gmail.com
> Sent: Wednesday, May 09, 2007 5:12 PM
> To: python-l... at python.org
> Subject: Re: Checking if string inside quotes?
>
> On May 9, 1:39 pm, "Michael Yanowitz" <m.yanow... at kearfott.com> wrote:
> > Hello:
>
> >    If I have a long string (such as a Python file).
> > I search for a sub-string in that string and find it.
> > Is there a way to determine if that found sub-string is
> > inside single-quotes or double-quotes or not inside any quotes?
> > If so how?
>
> > Thanks in advance:
> > Michael Yanowitz
>
> I think the .find() method returns the index of the found string.  You
> could check one char before and then one char after the length of the
> string to see.  I don't use regular expressions much, but I'm sure
> that's a more elegant approach.
>
> This will work. You'll get in index error if you find the string at
> the very end of the file.
>
> s = """
> foo
> "bar"
> """
> findme = "foo"
> index = s.find(findme)
>
> if s[index-1] == "'" and s[index+len(findme)] == "'":
>         print "single quoted"
> elif s[index-1] == "\"" and s[index+len(findme)] == "\"":
>    print "double quoted"
> else:
>    print "unquoted"
>
> ~Sean
>
> --http://mail.python.org/mailman/listinfo/python-list

In that case I suppose you'd have to read the file line by line and if
you find your string in the line then search for the indexes of any
matching quotes.  If you find matching quotes, see if your word lies
within any of the quote indexes.

#!/usr/bin/env python

file = open("file", 'r')
findme= "foo"
for j, line in enumerate(file):
    found = line.find(findme)
    if found != -1:
        quotecount = line.count("'")
        quoteindexes = []
        start = 0
        for i in xrange(quotecount):
            i = line.find("'", start)
            quoteindexes.append(i)
            start = i+1

        f = False
        for i in xrange(len(quoteindexes)/2):
            if findme in
line[quoteindexes.pop(0):quoteindexes.pop(0)]:
                f = True
                print "Found %s on line %s: Single-Quoted" % (findme, j
+1)
        if not f:
            print "Found %s on line %s: Not quoted" % (findme, j+1)


It's not pretty but it works.

~Sean




More information about the Python-list mailing list