[Tutor] finding a number with str.find

Alan Gauld alan.gauld at btinternet.com
Mon Oct 8 19:07:38 CEST 2012


On 08/10/12 17:33, Benjamin Fishbein wrote:
> Is there a way to find the next character that is a digit (0-9) in a string?
 > it seems that the str.find method can only find one particular 
character,

When looking for patterns rather than literal values you need to use 
regular expressions. These can get very complex very quickly but 
searching for a number is not too bad. One simple way (although
not optimal) is to put the characters you want inside square brackets

 >>> import re
 >>> s = "a string with 7 words in it"
 >>> res = re.search("[0-9]", s)
 >>> res.group()
'7'

This returns something called a match object which can tell you what was 
found. You can then use that to find the index in the string.

 >>> s.index( res.group() )
14

Having digits in a search pattern is such a common thing that there
is a special syntax for that - '\d' :

 >>> s.index( re.search("\d", s).group() )
14

Finally you can find all occurrences of a pattern in a string using 
re.findall() which returns a list of the found matches:

 >>> re.findall("\d",s)   # only one occurrence in this case...
['7']

you can then loop through the results to locate each item.

Regular expressions are way more powerful than this and there can be a 
tendency to overuse them. This should be resisted since they can 
introduce very hard to find bugs due to subtle errors in the patter 
specification.

You can find a very gentle introduction to their other features in the 
re topic of my tutorial.

HTH,

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/



More information about the Tutor mailing list