Strings in Python

J

Johny

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

Gary Herron

Johny said:
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


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
 
S

Shawn Milo

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

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

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

Shawn Milo

Johny said:
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


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

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
 
A

attn.steven.kuo

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


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
 
M

MRAB

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

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
 

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

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,070
Latest member
BiogenixGummies

Latest Threads

Top