470,855 Members | 1,161 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,855 developers. It's quick & easy.

Strings in Python

Playing a little more with strings, I found out that string.find
function provides the position of
the first occurance of the substring in the string.
Is there a way how to find out all substring's position ?
To explain more,
let's suppose

mystring='12341'
import string
>>string.find(mystring ,'1')
0

But I need to find the possition the other '1' in mystring too.
Is it possible?
Or must I use regex?
Thanks for help
L

Feb 8 '07 #1
6 1543
Johny wrote:
Playing a little more with strings, I found out that string.find
function provides the position of
the first occurance of the substring in the string.
Is there a way how to find out all substring's position ?
To explain more,
let's suppose

mystring='12341'
import string

>>>string.find(mystring ,'1')
0

But I need to find the possition the other '1' in mystring too.
Is it possible?
Or must I use regex?
Thanks for help
L

You could use a regular expression. The re module has s function
"findall" that does what you want.

Also, if you read the documentation for strings find method, you'll find:

1 S.find(sub [,start [,end]]) -int
2
3 Return the lowest index in S where substring sub is found,
4 such that sub is contained within s[start,end]. Optional
5 arguments start and end are interpreted as in slice notation.
6
7 Return -1 on failure.

So put your find in a loop, starting the search one past the previously
found occurrence.

i = string.find(mystring, i+1)

Gary Herron
Feb 8 '07 #2
On 8 Feb 2007 08:28:25 -0800, Johny <py****@hope.czwrote:
Playing a little more with strings, I found out that string.find
function provides the position of
the first occurance of the substring in the string.
Is there a way how to find out all substring's position ?
To explain more,
let's suppose

mystring='12341'
import string
>string.find(mystring ,'1')
0

But I need to find the possition the other '1' in mystring too.
Is it possible?
Or must I use regex?
Thanks for help
L

--
http://mail.python.org/mailman/listinfo/python-list
Loop it -- once you know the index of the first character, add the
third argument to string.find(), which tells it the position at which
to start (the last find + 1).
Feb 8 '07 #3
On 2/8/07, Gary Herron <gh*****@islandtraining.comwrote:
Johny wrote:
Playing a little more with strings, I found out that string.find
function provides the position of
the first occurance of the substring in the string.
Is there a way how to find out all substring's position ?
To explain more,
let's suppose

mystring='12341'
import string

>>string.find(mystring ,'1')
0

But I need to find the possition the other '1' in mystring too.
Is it possible?
Or must I use regex?
Thanks for help
L
You could use a regular expression. The re module has s function
"findall" that does what you want.

Also, if you read the documentation for strings find method, you'll find:

1 S.find(sub [,start [,end]]) -int
2
3 Return the lowest index in S where substring sub is found,
4 such that sub is contained within s[start,end]. Optional
5 arguments start and end are interpreted as in slice notation.
6
7 Return -1 on failure.

So put your find in a loop, starting the search one past the previously
found occurrence.

i = string.find(mystring, i+1)

Gary Herron
--
http://mail.python.org/mailman/listinfo/python-list
Speaking of regex examples, that's basically what I did in the script
below which James Kim and I were collaborating on yesterday and this
morning, as a result of his thread.

This matches not only a string, but a regex, then loops through each
match to do something to it. I hope this helps. I submitted this to
the list for recommendations on how to make it more Pythonic, but at
least it works.

Here are the most important, stripped down pieces:

#! /usr/bin/python

import re

#match a date in this format: 05/MAR/2006
regex = re.compile(r",\d{2}/[A-Z]{3}/\d{4},")

for line in infile:

matches = regex.findall(line)
for someDate in matches:

newDate = #do something here
line = line.replace(someDate, newDate)
Here is the full script:

#! /usr/bin/python

import sys
import re

month ={'JAN':1,'FEB':2,'MAR':3,'APR':4,'MAY':5,'JUN':6, 'JUL':7,'AUG':8,'SEP':9,'OCT':10,'NOV':11,'DEC':12 }
infile=file('TVA-0316','r')
outfile=file('tmp.out','w')

def formatDatePart(x):
"take a number and transform it into a two-character string,
zero padded"
x = str(x)
while len(x) < 2:
x = "0" + x
return x

regex = re.compile(r",\d{2}/[A-Z]{3}/\d{4},")

for line in infile:
matches = regex.findall(line)
for someDate in matches:

dayNum = formatDatePart(someDate[1:3])
monthNum = formatDatePart(month[someDate[4:7]])
yearNum = formatDatePart(someDate[8:12])

newDate = ",%s-%s-%s," % (yearNum,monthNum,dayNum)
line = line.replace(someDate, newDate)

outfile.writelines(line)

infile.close
outfile.close
Feb 8 '07 #4
On Feb 8, 8:28 am, "Johny" <pyt...@hope.czwrote:
Playing a little more with strings, I found out that string.find
function provides the position of
the first occurance of the substring in the string.
Is there a way how to find out all substring's position ?
To explain more,
let's suppose

mystring='12341'
import string
>string.find(mystring ,'1')

0

But I need to find the possition the other '1' in mystring too.
Is it possible?
Or must I use regex?

In this case, you can use:

mystring = '12341'
indices = [ _ for _ in range(len(mystring)) if mystring[_] == '1' ]
print indices

--
Hope this helps,
Steven

Feb 8 '07 #5
On Feb 8, 6:32 pm, attn.steven....@gmail.com wrote:
On Feb 8, 8:28 am, "Johny" <pyt...@hope.czwrote:
Playing a little more with strings, I found out that string.find
function provides the position of
the first occurance of the substring in the string.
Is there a way how to find out all substring's position ?
To explain more,
let's suppose
mystring='12341'
import string
>>string.find(mystring ,'1')
0
But I need to find the possition the other '1' in mystring too.
Is it possible?
Or must I use regex?

In this case, you can use:

mystring = '12341'
indices = [ _ for _ in range(len(mystring)) if mystring[_] == '1' ]
print indices
Or:

mystring = '12341'
indices = [ i for i, c in enumerate(mystring) if c == '1' ]
print indices

Feb 8 '07 #6
Thanks ALL for help and ideas
L

Feb 9 '07 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

20 posts views Thread by Ravi | last post: by
17 posts views Thread by Gordon Airport | last post: by
16 posts views Thread by Paul Prescod | last post: by
5 posts views Thread by Maurice LING | last post: by
11 posts views Thread by bearophile | last post: by
26 posts views Thread by William Park | last post: by
2 posts views Thread by Neil Schemenauer | last post: by
14 posts views Thread by Dennis Benzinger | last post: by
5 posts views Thread by BBands | last post: by
2 posts views Thread by bearophileHUGS | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.